如何避免在没有添加额外数字的情况下在python中打印科学记数法?

时间:2011-06-20 19:37:17

标签: python floating-point string-formatting

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'

围绕这个(正则表达式替换或其他东西)蛮力并不难,但我想知道是否有一些格式字符串魔法我不知道。

2 个答案:

答案 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))