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

Is there a way to show correct float value?

有没有办法像 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

我对结果变量感兴趣。不同步。对不起,我想要的解释不充分。 :)

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

在 Python2.7(或 Python3)中,您可以使用 str.format:

控制小数点后显示的位数
print('{:.14f}'.format(result))

打印

99.99999999999997

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

以二进制形式存储十进制浮点数会导致在以十进制表示时出现舍入问题。这是任何语言(计算机编程)生活中的一个事实,但 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