Round Function在v2.6.6中不起作用,但适用于v3.4.2

时间:2014-11-30 14:15:22

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

我的round函数在linux python 2.6.6中不起作用,而在Windows 3.4.2中它可以正常工作 使用以下类型的代码后:

Array[i] = round(math.e ** AnotherArray[i], 4)

v.3.4.2:  0.0025999999999999999 => 0.0026
v.2.6.6:  0.0025999999999999999 =>  0.0025999999999999999

1 个答案:

答案 0 :(得分:8)

它们的工作原理相同,但是Python 2.7及更高版本在打印repr表示时会将浮点数舍入,以免混淆用户(语言和机器)独立)limitations of floating point arithmetic

十进制数0.0026无法完全表示为二进制float,因此总会出现一些舍入错误。

如果您想减少混淆,只需print数字:

>>> a = 0.0025999999999999999
>>> b = round(a,5)
>>> b                  # this calls repr(b) 
0.0025999999999999999
>>> print b            # this calls str(b)
0.0026

在实践中,这些舍入错误很少发生,尽管您需要了解它们,尤其是在比较相等时。

以下循环不会在0停止

x = 1.0
while x != 0:
    print x
    x -= 0.1

为什么呢?我们来看看:

>>> x = 1.0
>>> while x != 0:
...     print repr(x)
...     x -= 0.1
...     if x<0: break
...
1.0
0.90000000000000002
0.80000000000000004
0.70000000000000007
0.60000000000000009
0.50000000000000011
0.40000000000000013
0.30000000000000016
0.20000000000000015
0.10000000000000014
1.3877787807814457e-16

因此,请始终考虑sys.float_info.epsilon

>>> x = 1.0
>>> while abs(x) > sys.float_info.epsilon:
...     print x
...     x -= 0.1
...
1.0
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1