0

可能重复:
Javascript 数学错误:不精确的浮点数

我有以下代码来制作动画(doIt 制作动画但不相关)。

function recur(max, i){
    console.log("i: " + i);
    if ( i <= 1){
        setTimeout(function(){
            // doIt(max,i);
            recur(max, i + 0.1);                
        },100);
    } else {
        // OK
    }
}
recur(16,0);

但是,i 值并不一致。对于以下代码,输出为(Google Chrome 20):

i: 0 
i: 0.1 
i: 0.2 
i: 0.30000000000000004
i: 0.4 
i: 0.5 
i: 0.6 
i: 0.7 
i: 0.7999999999999999 
i: 0.8999999999999999 
i: 0.9999999999999999 
i: 1.0999999999999999 

为什么会这样?我想要 0.3 不是一个如此接近的数字。不幸的是,这发生在每次迭代中。

4

2 回答 2

10

要输出0.3,您可以使用toFixed浮点数,正如@Oleksi 指出的那样,浮点数有轻微的计算错误。

console.log((0.1 + 0.2).toFixed(1)); // 0.3
于 2012-07-01T19:44:54.913 回答
1

这是意料之中的。由于计算机内部存储的方式,计算机上的浮点运算具有像这样的小精度误差。有关更多信息,我建议您阅读每个计算机科学家都应该了解的关于浮点运算的知识

将无限多个实数压缩为有限位数需要近似表示。尽管整数有无限多,但在大多数程序中,整数计算的结果可以存储在 32 位中。相反,给定任何固定位数,大多数实数计算将产生无法使用那么多位精确表示的量。因此,浮点计算的结果必须经常四舍五入以适应其有限表示。这种舍入误差是浮点计算的特征。

类似的问题被问了很多。看到这个

于 2012-07-01T19:42:32.060 回答