为什么声明5 * 1.015不返回5.075?

时间:2012-06-06 21:05:00

标签: javascript

  

可能重复:
  Is JavaScript's Math broken?

返回

5.074999999999999

为什么?

还有哪些其他数字会对此进行类似的演示?

3 个答案:

答案 0 :(得分:6)

关于浮点运算的基本阅读。

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

简而言之:

  

将无数多个实数压缩成有限数量的位   需要近似的表示。虽然有无限的   许多整数,在大多数程序中,整数计算的结果都可以   以32位存储。相反,给定任意数量的位,   大多数带有实数的计算都会产生数量   不能使用那么多位来精确表示。因此   浮点计算的结果通常必须按顺序舍入   以适应其有限的表示。这个舍入误差是   浮点计算的特征。

答案 1 :(得分:4)

嗯,经典的例子是:

0.1 + 0.2 = 0.30000000000000004

IEEE 754双精度浮点数(这是JavaScript uses非常好,但它们并不完美。它们提供了一种快速的方法,可以对浮点数进行大多数正确但不完美的计算。所有数字系统都有这样的妥协(例如,尝试准确地代表1 / 3 - 或PI,例如有限的十进制数字。)

答案 2 :(得分:4)

这是正常的 - 使用浮点数时会有一个称为精度的东西。它出现在大多数现代语言中。有关详细信息,请参见此处:http://www.mredkj.com/javascript/nfbasic2.html

在这种思路中 - 如果不使用EPS(epsilon值),则无法比较浮点数。如果您需要更多信息 - 请随时与我联系。