node.js - 17decimal上的减法不正确?

时间:2017-11-09 16:55:53

标签: javascript node.js

这肯定是重复的,但到目前为止还没有找到答案。 当我在节点脚本中将0.8 - 0.45计算为变量或直接在控制台中计算时,它会导致:

0.35000000000000003

为什么呢?我该如何正确计算?

3 个答案:

答案 0 :(得分:1)

问题在于浮点数存储在内存中的方式。浮点运算的结果始终是预期结果的近似值。

你应该忽略它。在大多数语言中,当打印时,浮点值会被截断。

答案 1 :(得分:0)

如果您在节点中打印它,可以尝试(.8-.45).toFixed(2)或者您想要的小数点数

答案 2 :(得分:0)

二进制中的浮点运算在很多时候并不是十进制算术的完美表示。类似于十进制数学遇到无限小数,“无理数”(平方根2,pi等),二进制也会遇到无理或其他“巨大”数字,有时在十进制数非常短的情况下,它可能会令人困惑,因为操作看起来很简单,而数字的二进制表示可能非常大。

https://en.wikipedia.org/wiki/Floating-point_arithmetic

因为计算机只为该数字指定了一定数量的位,这意味着该数字基本上是四舍五入的。

你永远不应该依赖浮点运算的结果来完美,但是你可以通过更多的位来增加变量的精度。