可能的重复:
JavaScript 的数学被破坏了吗?
它返回
5.074999999999999
这是为什么?
还有哪些其他数字会给出类似的证明?
浮点运算基础读物。
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
简而言之:
将无限多个实数压缩为有限位数需要近似表示。尽管整数有无限多,但在大多数程序中,整数计算的结果可以存储在 32 位中。相反,给定任何固定位数,大多数实数计算将产生无法使用那么多位精确表示的量。因此,浮点计算的结果必须经常四舍五入以适应其有限表示。这种舍入误差是浮点计算的特征。
嗯,经典的例子是:
0.1 + 0.2 = 0.30000000000000004
IEEE 754双精度浮点数(这是JavaScript 使用的)非常非常好,但它们并不完美。它们提供了一种对浮点数进行大部分正确但不完美的计算的快速方法。所有的数字系统都有这样的妥协(例如,试图准确地表示1 / 3
——或 PI,就此而言——用有限的十进制数字表示)。
这很正常——在处理浮点数时有一种叫做精度的东西。它存在于大多数现代语言中。请参阅此处:http ://www.mredkj.com/javascript/nfbasic2.html了解更多信息。
在这个思路中——你不能在不使用 EPS(epsilon 值)的情况下比较浮点数。如果您需要更多信息,请随时再次与我联系。