节点对特定浮点数字的总和给出奇怪的输出

Kar*_*nna 0 node.js

我在玩 Node REPL 时遇到了这种奇怪的行为。

4.32 + 4.78 应该只是 9.1

> 4.32 + 4.78 9.100000000000001

另一种是:

> 7.3 + 1.08 8.379999999999999

对于其他数字,它工作正常:

> 4.31 + 4.78 9.09

分别在 Ubuntu 16.04 和 Linux/amd64 上的 Node 版本 4.8.3 和 7.4 上进行了测试。

获得相同的输出。

谁能解释一下为什么会这样?

rsp*_*rsp 6

JavaScript 使用IEEE 754 双精度浮点数(请参阅 ECMA-262),它们无法准确表示所有小数。

要获得您期望的结果,您可以将数字缩放为整数(例如计算美分而不是美元),或者在计算后将数字四舍五入到特定的小数位数。

例子:

> 4.32 + 4.78
9.100000000000001

> (432 + 478) / 100
9.1

> +(4.32 + 4.78).toFixed(2)
9.1

> Math.round(100 * (4.32 + 4.78)) / 100
9.1
Run Code Online (Sandbox Code Playgroud)

请参阅此了解更多详细信息: