我遇到了这个四舍五入的问题:
当我这样做时:
.2 + .1 results in 0.30000000000000004
.7 + .1 results in 0.7999999999999999
1.1 + .1 results in 1.2000000000000002
依旧......
任何人都可以解释(详细)为什么?可能是一些二进制舍入的东西。但我想知道会发生什么......
答案 0 :(得分:5)
简而言之,因为.2
实际上不是.2;它实际上是最接近的可表示的双精度数,即
0.200000000000000011102230246251565404236316680908203125.
同样,.1
确实是
0.1000000000000000055511151231257827021181583404541015625
将这些添加到一起时,结果将再次舍入到最接近的可表示数字,即
0.3000000000000000444089209850062616169452667236328125
最后,当你把它打印出来时,这个数字会四舍五入到17位小数,给出你观察到的结果。
您的其他示例遵循相同的模式。