关于python:为什么Python3中的print函数是十进制数?

Why does the print function in Python3 round a decimal number?

本问题已经有最佳答案,请猛点这里访问。

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

1
2
3
4
5
>>> 1.2 - 1.0
0.19999999999999996

>>> print 1.2 - 1.0
0.2

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

1
2
3
4
5
>>> 1.2 - 1.0
0.19999999999999996

>>> print(1.2 - 1.0)
0.19999999999999996

我想知道为什么在python2.7.12 print语句中只给出0.2,而在python3.5.2 print函数中给出0.199999999999996。


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

1
2
3
# For Python 2.7
>>> print (1.2 - 1.0).__str__()
0.2

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

1
2
>>> print (1.2 - 1.0).__repr__()
0.19999999999999996

有关详细信息,请查看martjin对python 2.6和2.7中浮点行为的回答,其中说明:

In Python 2.7 only the representation changed, not the actual values. Floating point values are still binary approximations of real numbers, and binary fractions don't always add up to the exact number represented.


肾盂2.7轮中的print浮点数。实际上,数字1.2和0.2不能在内存中精确表示(它们是二进制代码中的无限小数)。因此,为了正确地输出,一些编程语言的输出函数可能会使用round。python2.7中的print使用圆,而python3.x中的print不使用圆。