所以我打开了 Python 2.6 解释器,得到了这个:
Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2.1
2.1000000000000001
>>> 2.2
2.2000000000000002
>>> 2.2
2.2000000000000002
然而,在 Python 2.7 中,我得到了更多类似人类的结果,如下所示:
Python 2.7.5+ (default, Sep 19 2013, 13:48:49)
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 5.4
5.4
>>> 1.1
1.1
>>> 0.2
0.2
>>>
我想问为什么会发生这种情况,我怎样才能让 Python 2.6 表现得像 2.7 一样?
The float.__repr__()
and float.__str__()
Python 2.7 中的方法发生了变化; Python 3.1 浮点到字符串的转换方法已向后移植,并且值现在已四舍五入。
C 源代码float.__str__()
使用以下格式格式化浮点值g
格式化程序代码sprintf()
函数,精度为 12 位。
要在 Python 2.6 中获得相同的结果,您必须自己格式化字符串:
'%.12g' % fp_value
或使用format()
功能:
format(fp_value, '.12g')
请注意,在 Python 2.7 中仅表示改变了,而不是实际值。浮点值仍然是实数的二进制近似值,并且二进制分数并不总是加起来等于exact代表的数字。
如果您需要比什么更精确float
近似值为您提供,您需要切换到使用decimal.Decimal() type反而。这保持了精度,但以速度为代价(浮点运算是在现代计算机的硬件中处理的)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)