有没有办法显示正确的浮动值?

时间:2015-06-01 10:08:19

标签: python python-2.7 floating-point division

有没有办法像Python 3那样在Python 2中显示浮点值?

代码:

text = "print('hello, world')"

step = 100.0 / len(text)
result = 0.0

for _ in text:
    result += step

print result
print step
print result == 100.0

Python 2.7.9

100.0
4.7619047619
False

Python 3.4.3

99.99999999999997
4.761904761904762
False

我对结果变量很感兴趣。不在步骤。很抱歉没有足够的解释我想要什么。 :)

3 个答案:

答案 0 :(得分:2)

在Python2或Python3中运行代码会计算resultstep相同值。唯一的区别在于浮动的打印方式。

在Python2.7(或Python3)中,您可以使用str.format控制小数点后显示的位数:

print('{:.14f}'.format(result))

打印

99.99999999999997

答案 1 :(得分:2)

repr显示更多数字(我猜测刚刚重现相同的浮点数):

>>> print result
100.0
>>> print repr(result)
99.99999999999997
>>> result
99.99999999999997

>>> print step
4.7619047619
>>> print repr(step)
4.761904761904762
>>> step
4.761904761904762

答案 2 :(得分:0)

以二进制形式存储十进制浮点数会导致以十进制表示舍入问题。这是任何语言中(计算机编程)生活的事实,但Python2与python3的处理方式不同(参见:25898733)。

使用string formatting可以使你的脚本在python2中产生与python3中相同的输出,并且还具有更易读的输出:

text = "print('hello, world')"
step = 100.0 / len(text)
result = 0.0

for _ in text:
    result += step

print ("{0:.1f}".format(result))
print ("{0:.1f}".format(step))

print ("{0:.1f}".format(result) == "100.0")  # kludge to compare floats

<强>输出

100.0
4.8
True