高手,请问
为什么这个四舍五入
alert(Math.round(100*69451.385)/100);
alert(Math.round(100*(277805.54*0.25))/100);
得到的值都是69451.38而不是预想的69451.39
这个问题很畸形啊,请帮我一下

解决方案 »

  1.   

    因为这里
    alert(100*69451.385)
    等于
    6945138.49999
    未到5未到5的原因是js是计算是使用二进制的
    在10进制中有限小数经过二进制的计算中可能会变成无限小数
    所以得到.49999了
      

  2.   

    javascipt的浮点运算精度问题.
    奇怪的事有很多,比如:alert(7*0.8)
      

  3.   

    var x = 100*69451.385/100;
    var y = 100*(277805.54*0.25)/100;
    alert(x.toFixed(2)); 
    alert(y.toFixed(2)); 
      

  4.   

    alert(parseFloat((100*69451.385)/100).toFixed(2));
      

  5.   

    javascript的Math.round()用的是国际标准的四舍五入.
    也就是说0至4是舍去的,6至9是要入的.
    5比较特殊.在国际标准中,5是奇进偶舍---
    也就是说Math.round(69451.385)5的前一位是8,8是偶数.所以得到69451.38
    如果说是Math.round(69451.315)5的前一位是1,1是奇数,所以得到69451.32
      

  6.   

    8楼的说法是正确的,不只js,.net等编程语言都是如此
      

  7.   

    也就是说alert(Math.round(100*69451.385)/100)5的前一位是8,8是偶数.所以得到69451.38 
    如果说是alert(Math.round(100*69451.315)/100)5的前一位是1,1是奇数,所以得到69451.32
      

  8.   

    document.write(Math.round(100*69451.365)/100);结果是69451.37  5前面是6,为什么又进上去了
    document.write(Math.round(100*69451.345)/100);结果是69451.35  5前面是4,为什么又进上去了
      

  9.   

    document.write(Math.round(100.0*69451.365)/100.0);
      

  10.   

    可能是按二进制表示法时的奇进偶舍原则实现的。
    也可能这是js的一个bug
      

  11.   


    100*69451.365=6945136.5
    Math.round(6945136.5) = 69451.37
      

  12.   

      这和 Math.round 函数是没有关系的。
       alert(100*65535.385);  ---> 6553538.5
    alert(100*65536.385);  ---> 6553538.4999999999
      JS是采用unicode对字符处理的,所以当操作数不在 -65535到65535范围运算就会出错。       alert(Math.round(100*65535.385)/100); ---> 65535.39
           alert(Math.round(100*65535.375)/100); ---> 65535.38