如何在Python中避免科学计数法而不添加额外数字?
这个问题是在问如何在Python中关闭科学计数法。
我有一系列数字需要显示,都是小的10的幂,我想把它们显示出来,而且不想有多余的零。比如说0.1、0.01,一直到0.000001。
如果我用 "%s" % 10 ** -6
,得到的结果是 '1e-06'
。但如果我用 "%f" % 10 ** -6
,我就能得到 '0.000001'
,这正是我想要的。
不过,使用 "%f" % 10 ** -3
的话,结果是 '0.001000'
,这就不符合“没有多余零”的要求了。
虽然用一些简单的方法(比如正则表达式替换)可以解决这个问题,但我在想是不是有什么格式字符串的技巧我还没发现。
2 个回答
2
简单的 rstrip("0")
方法在处理一些小数和特定的值时表现得不太好,它应该在小数点后保留一个零,比如 0.0
而不是 0.
:
def format_float(value, precision=-1):
if precision < 0:
f = "%f" % value
else:
f = "%.*f" % (precision, value)
p = f.partition(".")
s = "".join((p[0], p[1], p[2][0], p[2][1:].rstrip("0")))
return s
print(format_float(3e-10))
print(format_float(3e-10, 20))
print(format_float(1.5e-6))
print(format_float(1.5e+6))
7
我觉得这个方法有点小聪明,但你可以用 str.rstrip("0")
来去掉字符串末尾的零:
>>> "{:f}".format(10**-6).rstrip("0")
'0.000001'
>>> "{:f}".format(10**-3).rstrip("0")
'0.001'
补充:正如评论里提到的,其实还有更好的方法:
>>> format(1e-6, 'f').rstrip('0')
'0.000001'
>>> format(1e-3, 'f').rstrip('0')
'0.001'