Javascript 将 0.1 添加到 0.2 导致 0.30000000000000004

Mus*_*afa 0 javascript settimeout

可能重复:
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);
Run Code Online (Sandbox Code Playgroud)

但是,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 
Run Code Online (Sandbox Code Playgroud)

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

Bla*_*ter 8

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

console.log((0.1 + 0.2).toFixed(1)); // 0.3
Run Code Online (Sandbox Code Playgroud)