有没有办法显示正确的浮点值?
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 中的代码为 result
和 step
计算 相同的 值.唯一的区别在于浮点数的打印方式。
在 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
有没有办法像 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 中的代码为 result
和 step
计算 相同的 值.唯一的区别在于浮点数的打印方式。
在 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