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

时间:2016-12-20 04:59:41

标签: python python-2.7 python-3.x

如果我在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。

2 个答案:

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

Python2.7中的

print轮数浮点数。实际上,数字1.2和0.2不能在内存中精确表示(它们是二进制代码中的无限分数)。因此,为了正确输出它,编程语言中的一些输出函数可以使用该轮。 Python2.7中的print使用了回合,但Python3.x中的print没有。