Javascript 1+;0.72=1.72,但为2+;0.72=2.7199999998为什么?

Javascript 1+;0.72=1.72,但为2+;0.72=2.7199999998为什么?,javascript,Javascript,我正在做一个项目,我注意到一些奇怪的值。我用不同的输入值做了一些测试,结果是——在我看来——奇怪的行为: 1 + 0.72 = 1.72 // expecting 1.72 2 + 0.72 = 2.7199999999999998 // 2.72 1 + 1.72 = 2.7199999999999998 // 2.72 1 + 2.72 = 3.72 // 3.72 1 + 3.72 = 4.720000000000001 // 4.72 有没有人知道发生了什么以及如何预防这种情况,也就是

我正在做一个项目,我注意到一些奇怪的值。我用不同的输入值做了一些测试,结果是——在我看来——奇怪的行为:

1 + 0.72 = 1.72 // expecting 1.72
2 + 0.72 = 2.7199999999999998 // 2.72
1 + 1.72 = 2.7199999999999998 // 2.72
1 + 2.72 = 3.72 // 3.72
1 + 3.72 = 4.720000000000001 // 4.72

有没有人知道发生了什么以及如何预防这种情况,也就是说,我如何确保我得到了我所期望的?

解决问题的一种方法是:

parseFloat(val.toFixed(2))

欢迎来到浮点数学!这不仅仅是javascript。作为一个自我回答的问题,这有点缺乏。我希望更多的努力使答案规范化(并首先检查重复)。二进制浮点数不善于处理小数,因此0.1+0.2不等于0.3。这是JavaScript中最常报告的错误,这是采用IEEE二进制浮点算法标准(IEEE 754)的故意结果。我不是暗示或假设你是,我只是注意到你可以在你的问题中包含一个试图修复的错误。毕竟,这表明了在试图解决这一问题上的一些努力。我不明白你为什么这么快就为自己辩护,我不是在指责你。另一种方法是
var result=Math.round(val*100)/100
,它不会转换为字符串,也不会转换为浮点。但不确定它是否更有效。@b如果您愿意将您的建议作为答案发布,我很乐意将其标记为“答案”,因为它显然更优雅。