Javascript在添加时添加了额外的精度

时间:2012-06-26 19:11:19

标签: javascript math floating-point numbers rounding

  

可能重复:
  Is JavaScript's Math broken?

关于原因的任何想法:

(872.23 + 2315.66 + 4361.16) == 7549.05

在Javascript控制台(例如Chrome Developer控制台)中返回false?

如果我用我的计算器尝试它,左侧确实是7549.05 ...但是,Javascript显示为7549.049999999999。我可以“修复”它或将它绕过,或者......但为什么我应该这样做才能进行简单的添加?

由于

4 个答案:

答案 0 :(得分:1)

这不是Javascript添加额外的精度,这是您的计算机的浮点表示无法准确表示您的数字。通过使用有理数或定点(而不是浮点)算法来解决它。

答案 1 :(得分:1)

通过使用小数,您使用的是浮点数。您需要了解一下浮点如何以二进制形式表示,以及二进制浮点加法如何理解为什么添加浮点数并不总能解析为您想要的。

以下是您可能想要浏览的快速Google结果:The Complete Javascript Number Reference

此外,如果您想了解如何以二进制方式表示浮点数,请查看维基百科上的IEEE floating point

在这种情况下,你最好的选择是圆。

答案 2 :(得分:1)

这是因为硬件中的浮点数如何表示(可能是32位,但在任意位数都是相同的)。基本上问题是你不能完全代表“7549.05”这样的东西(更多关于wikipedia中的这个问题)。

因此,对于实际用途,如果数字是货币,一个好的选择是乘以100,因此它们总是整数,并且以整数运算(在添加,减去或乘以时会产生良好的结果)。

答案 3 :(得分:1)