我想我理解为什么0.1 + 0.2是0.30000000000000004,但遵循相同的逻辑,为什么0.2 + 0.2 = 0.4?不是0.2是二进制基数不能得到的值吗? 谢谢你的时间。
答案 0 :(得分:2)
要获得0.2
,您需要对二进制分数求和。以下是前几个:
Decimal Binary
1 = 1
0.5 = 0.1
0.25 = 0.01
0.125 = 0.001
0.0625 = 0.0001
所以,要获得0.2,你需要求和
0.125
+ 0.0625 = 0.187500
下一个二进制分数是0.03125。如果我总结一下,它太大(> 0.2),那么下一个就是0.015625。以下一个,0.0078125没问题,所以
0.125 + 0.0625 + 0.0078125 = 0.195312
等等。所以我们跳过0.5(给出0)和0.25(另外0),我们确实使用了0.125(1)和0.0625(1)。同样,我们跳过两个值(00)并使用下一个(1)......
但是,无论我们做什么,我们都不能用精确的二进制数表示0.2。我们必须继续并继续......如果我们不能无限地继续下去,那么表示就不是0.2 ......
现在尝试使用0.25或0.25 ......
现在我们为什么在现代蟒蛇中看到不同的东西(> = 2.7,> = 3),这来自内部变化:
在Python 2.7和Python 3.1之前的版本中,Python对此进行了四舍五入 值为17位有效数字,给出'0.10000000000000001'。在 当前版本,Python显示基于最短的值 正确舍入回到真实二进制值的小数部分, 结果只是'0.1'。
请参阅页面底部的this article。