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

时间:2011-12-22 05:38:56

标签: javascript math floating-point

  

可能重复:
  Is JavaScript's Math broken?
  Strange result with floating point addition

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

这种不精确性来自哪里?

当然,我可以使用i.toPrecision()或其他方法处理它,但是它必须是那样的吗?这是一个浮点舍入错误吗?

在这个例子中也是如此:

var i=0.14+0.01; //expected == 0.15
console.log(i);  //== 0.15000000000000002

在0.14和0.15之间发生了什么?

var i=0.1400001+0.01; //expected==0.1500001
console.log(i);       //== 0.1500001 ok!

var i=0.14000001+0.01; //expected==0.15000001 !! 
console.log(i);        //== 0.15000001000000002

我需要做些什么才能获得正确的结果?

3 个答案:

答案 0 :(得分:8)

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

What Every Computer Scientist Should Know About Floating-Point Arithmetic

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

答案 1 :(得分:0)

它们只是浮点错误。

使用整数,将你正在做的所有事物乘以你想要的10 *个精度。

答案 2 :(得分:0)

Floatinhg点数不是精确地存储在计算机中 - 您需要考虑它们的二进制表示。因此,使用浮点数运算可以得到舍入误差。