var pre = 1041.735;
var v1 = Math.round(pre * 100) / 100;
var v2 = Math.floor(pre * 100) / 100;
var v3 = Math.ceil(pre * 100) / 100;
console.log(v1);
console.log(v2);
console.log(v3);按测试结果你需要的可能是v3的这种方式。

解决方案 »

  1.   

    你这里的round方法,应该是自己定义的函数了吧如果是Math对象自带的方法,是不会再有小数的。看下round方法内部怎么实现的呗
      

  2.   

    首先感谢各位热心帮忙,然后把疑问中的错误改一下,var pre = 1041.735 * 0.3 =1041.735=》改为
    var pre  = 3472.45 * 03 = 1041.735,round(pre, 2)=1041.73; // 期望的结果是1041.74
    round的实现方法如下:
    function round(number, precision) {
    if (isNaN(number))
    number = 0;
    var prec = Math.pow(10, precision);
    var result = Math.round(number * prec);
    result = result / prec;
    return result;
    }
      

  3.   

    小数点操作是有误差的,比如按照你的数据,在round内部打印一下数据:
    function round(number, precision) {
    if (isNaN(number)){
    number = 0;
    }
    var prec = Math.pow(10, precision),
    result = Math.round(number * prec);
    console.log("result="+number * prec);
    //result=104173.49999999999
    console.log("result="+result);
    //result=104173
    result = result / prec;

    return result;
    }
    var pre = 3472.45 * 0.3;
    console.log(round(pre,2));
      

  4.   

    这个是JS本身浮点运算时的BUG。
    Math.round(number * prec);的时候JS算出来的是104173.49999999999,实际应该是104173.5。解决方案就是把小数都先换成整数(这里要注意不是直接乘10的几次方而是当做字符串处理),再做乘法。
      

  5.   

    用字符串和正则表达式移动小数点好了function round(number, precision) {
    if (isNaN(number))
    return NaN;
    var str = number.toString(10);
    var reg = new RegExp("\\.(\\d{"+precision+"})");
    if (/[^\-\.\d]/.test(str) || !reg.test(str))
    return number;
    str = str.replace(reg,"$1.");
    return Math.round(parseFloat(str)) / Math.pow(10, precision);
    }
    var pre = 3472.45 * 0.3;
    alert(round(pre,2));
      

  6.   

    a = 3472.45 * 03;
    document.write(Math.round(a*100)/100);
    document.write(Math.floor(a*100+0.5)/100);
    均输出 10417.35