为什么python显示0.2 + 0.2为0.4?

时间:2015-07-01 22:44:57

标签: python floating-point

我想我理解为什么0.1 + 0.2是0.30000000000000004,但遵循相同的逻辑,为什么0.2 + 0.2 = 0.4?不是0.2是二进制基数不能得到的值吗? 谢谢你的时间。

1 个答案:

答案 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