如何在Python中避免科学计数法而不添加额外数字?

5 投票
2 回答
8041 浏览
提问于 2025-04-16 19:56

这个问题是在问如何在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'

撰写回答