为什么Python3中的print函数是十进制数?

Pre*_*ain 5 python python-2.7 python-3.x

如果我在python2.7控制台上运行它,它给我输出为:

>>> 1.2 - 1.0
0.19999999999999996

>>> print 1.2 - 1.0 
0.2
Run Code Online (Sandbox Code Playgroud)

我在python3.5.2中运行相同的操作

>>> 1.2 - 1.0
0.19999999999999996

>>> print(1.2 - 1.0)
0.19999999999999996
Run Code Online (Sandbox Code Playgroud)

我想知道为什么在python2.7.12打印语句只给我0.2但在python3.5.2打印函数给我0.19999999999999996.

Moi*_*dri 3

这不是由于 print 隐式调用的函数发生变化,而是由于 print 隐式调用的函数print发生变化。因此,当您进行打印时,它会发出如下调用:__str__floats

# For Python 2.7
>>> print (1.2 - 1.0).__str__()
0.2
Run Code Online (Sandbox Code Playgroud)

为了按原样显示浮动值,您可以显式调用.__repr__

>>> print (1.2 - 1.0).__repr__()
0.19999999999999996
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看Martjin对 Python 2.6 vs 2.7 中的浮点行为的回答,其中指出:

在 Python 2.7 中,仅表示形式发生变化,实际值并未发生变化。浮点值仍然是实数的二进制近似值,并且二进制分数并不总是加起来等于所表示的精确数字。