0

可能的重复:
JavaScript 的数学被破坏了吗?

我遇到了这个四舍五入的问题:

当我这样做时:

 .2  + .1 results in 0.30000000000000004
 .7  + .1 results in 0.7999999999999999
1.1  + .1 results in 1.2000000000000002

等等...

谁能解释(详细)为什么?可能是一些二进制舍入的东西。但我真的很想知道会发生什么……

4

1 回答 1

5

简而言之,因为.2实际上不是 .2;它实际上是最接近的可表示双精度数,即

0.200000000000000011102230246251565404236316680908203125.

同样,.1是真的

0.1000000000000000055511151231257827021181583404541015625

当您将它们加在一起时,结果会再次四舍五入到最接近的可表示数字,即

0.3000000000000000444089209850062616169452667236328125

最后,当您打印出来时,该数字会四舍五入为 17 位小数,给出您观察到的结果。

您的其他示例遵循相同的模式。

于 2012-09-07T12:42:46.490 回答