可能的重复:
JavaScript 的数学被破坏了吗?
关于原因的任何想法:
(872.23 + 2315.66 + 4361.16) == 7549.05
在 Javascript 控制台(例如 Chrome 开发者控制台)中返回 false?
如果我用我的计算器试一试,左边确实是 7549.05... 但是,Javascript 将它显示为 7549.049999999999。我可以“修复”它或将其舍入,或者……但我为什么要为简单的添加而这样做?
谢谢
可能的重复:
JavaScript 的数学被破坏了吗?
关于原因的任何想法:
(872.23 + 2315.66 + 4361.16) == 7549.05
在 Javascript 控制台(例如 Chrome 开发者控制台)中返回 false?
如果我用我的计算器试一试,左边确实是 7549.05... 但是,Javascript 将它显示为 7549.049999999999。我可以“修复”它或将其舍入,或者……但我为什么要为简单的添加而这样做?
谢谢
那不是 Javascript 增加了额外的精度,而是您的计算机的浮点表示无法准确地表示您的数字。通过使用有理数或定点(而不是浮点)算术来解决它。
通过使用小数,您使用的是浮点数。您必须了解一点关于浮点如何以二进制形式表示,以及二进制浮点加法如何工作才能理解为什么添加浮点数并不总能解决您想要的问题。
这是您可能想看一眼的快速谷歌搜索结果:完整的 Javascript 编号参考
此外,如果您想了解浮点是如何用二进制表示的,请查看 Wikipedia 上的IEEE 浮点。
在这种情况下,你最好的选择是四舍五入。
这是因为浮点数在硬件中的表示方式(可能是 32 位,但在任何位数中都是相同的)。基本上问题是你不能准确地表示像“7549.05”这样的东西(更多关于这个问题的维基百科)。
因此,对于实际用途,如果数字是货币,一个好的选择是乘以 100,因此它们始终是整数,并使用整数进行运算(在加法、减法或乘法时会产生良好的结果)。