有没有办法像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
我对结果变量很感兴趣。不在步骤。很抱歉没有足够的解释我想要什么。 :)
答案 0 :(得分:2)
在Python2或Python3中运行代码会计算result
和step
的相同值。唯一的区别在于浮动的打印方式。
在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