This question询问如何在python中抑制科学记数法。
我有一系列要显示的数字 - 小功率为10 - 我想显示它们而没有尾随零。即0.1,0.01等等至0.000001
如果我"%s" % 10 ** -6
,我会'1e-06'
。如果我使用"%f" % 10 ** -6
,我会得到'0.000001'
这就是我想要的。
但是,"%f" % 10 ** -3
会产生违反“无尾随零”约束的'0.001000'
。
围绕这个(正则表达式替换或其他东西)蛮力并不难,但我想知道是否有一些格式字符串魔法我不知道。
答案 0 :(得分:7)
在我看来有点hacky,但您可以使用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'
答案 1 :(得分: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))