为什么语句 5 * 1.015 不返回 5.075

Why does the statement 5 * 1.015 not return 5.075?

本文关键字:返回 语句 为什么      更新时间:2023-09-26

可能的重复项:
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 值),就无法比较浮点数。如果您需要更多信息,请随时再次与我联系。