Javascript数学不精确错误?(0.1 + 0.01 + 0.01 + 0.01 + 0.01 + 0.01 == 0.15000000000000002)

fra*_*ank 1 javascript math floating-point

可能重复:
JavaScript的数学是否被破坏?
添加浮点数的奇怪结果

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)

为了获得正确的结果,我需要做些什么?

ale*_*lex 8

浮点算术不精确,因为某些数字无法准确存储,因此使用近似值.

每个计算机科学家应该知道的浮点运算

你能用Number整数来处理你的s然后用除法来得出最终答案吗?