浮点0.2+0.1舍入误差

floating point 0.2 + 0.1 rounding error

本文关键字:舍入误差 浮点      更新时间:2023-09-26

可能重复:
是JavaScript';s数学坏了吗?

我遇到了这个舍入问题:

当我这样做时:

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

等等…

有人能(详细地)解释一下原因吗?可能是一些二进制舍入的东西。但我真的很想知道会发生什么。。。

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

类似地,.1实际上是

0.1000000000000000055511151231257827021181583404541015625

当你把这些加在一起时,结果会再次四舍五入到最接近的可表示数字,即

0.3000000000000000444089209850062616169452667236328125

最后,当你打印出来时,这个数字会四舍五入到17位小数,得到你观察到的结果。

你的其他例子也遵循同样的模式。