我在玩 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 上进行了测试。
获得相同的输出。
谁能解释一下为什么会这样?
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)
请参阅此了解更多详细信息:
| 归档时间: |
|
| 查看次数: |
2710 次 |
| 最近记录: |