如果我在python2.7控制台上运行它,它输出为:
>>> 1.2 - 1.0
0.19999999999999996
>>> print 1.2 - 1.0
0.2
我在python3.5.2中运行相同的操作
>>> 1.2 - 1.0
0.19999999999999996
>>> print(1.2 - 1.0)
0.19999999999999996
我想知道为什么在python2.7.12打印语句只给我0.2但在python3.5.2打印函数给我0.19999999999999996。
答案 0 :(得分:3)
这不是由于print
的更改,而是__str__
floats
函数的更改,它隐式调用打印。因此,当您进行打印时,会进行如下调用:
# For Python 2.7
>>> print (1.2 - 1.0).__str__()
0.2
为了按原样显示浮动值,您可以明确地将.__repr__
称为:
>>> print (1.2 - 1.0).__repr__()
0.19999999999999996
有关详情,请查看Martjin's answer on Floating point behavior in Python 2.6 vs 2.7说明:
在Python 2.7中,只更改了表示,而不是实际值。浮点值仍然是实数的二进制近似值,二进制分数总是不等于所代表的确切数字。
答案 1 :(得分:0)
print
轮数浮点数。实际上,数字1.2和0.2不能在内存中精确表示(它们是二进制代码中的无限分数)。因此,为了正确输出它,编程语言中的一些输出函数可以使用该轮。 Python2.7中的print
使用了回合,但Python3.x中的print
没有。