日期:2014-05-16  浏览次数:20475 次

0.7*3=2.0999999999996?
今天写脚本的时候,alert(0.7*3);竟然等于2.099999999996,有人知道是怎么回事么?

------解决方案--------------------
又遇到这样的问题。
这是由于浮点数的精确度问题,基于IEEE754数值计算浮点数的通病,规避方法,确定你的数值的精确度,如加上toFixed(5),表示小数点后保留5位,四舍五入。
如alert((0.7*3).toFixed(5))
------解决方案--------------------
javascript的浮点数计算会产生舍入误差的问题。
浮点数值的最高精度是17位,但是在进行计算时其精度远远不如整数。例如0.1+0.2的结果不是0.3,而是0.30000000000000004。这个小小的误差会导致无法测试指定的浮点数值。


//不要做这样的测试
if (a + b == 0.3) {
    alert('result is 0.3');
}