fra*_*ank 1 javascript math floating-point
Safari 5.0.6中的一些简单的JavaScript计算,但Firefox中的相同现象:
var i=0.1;
i=i+0.01; //= 0.11
i=i+0.01; //= 0.12
i=i+0.01; //= 0.13
i=i+0.01; //= 0.14
i=i+0.01; // expected == 0.15
console.log(i); // == 0.15000000000000002
Run Code Online (Sandbox Code Playgroud)
这种不精确性来自哪里?
当然,我可以用它i.toPrecision()或其他方法处理它,但是它必须是那样的吗?这是一个浮点舍入误差吗?
在这个例子中也是如此:
var i=0.14+0.01; //expected == 0.15
console.log(i); //== 0.15000000000000002
Run Code Online (Sandbox Code Playgroud)
在0.14和0.15之间发生了什么?
var i=0.1400001+0.01; //expected==0.1500001
console.log(i); //== 0.1500001 ok!
Run Code Online (Sandbox Code Playgroud)
和
var i=0.14000001+0.01; //expected==0.15000001 !!
console.log(i); //== 0.15000001000000002
Run Code Online (Sandbox Code Playgroud)
为了获得正确的结果,我需要做些什么?