如何避免在不添加额外数字的情况下用python打印科学符号?

2024-05-13 07:27:22 发布

您现在位置:Python中文网/ 问答频道 /正文

This question询问如何在python中禁止使用科学符号。

我有一系列的数字要显示——10的小幂——我想不带尾随的零来显示它们。一、 e.0.1、0.01,依此类推,为0.000001

如果我做了"%s" % 10 ** -6,我得到'1e-06'。如果我用"%f" % 10 ** -6,我得到'0.000001',这就是我想要的。

然而,"%f" % 10 ** -3产生'0.001000',这违反了“无尾随零”约束。

用暴力来解决这个问题并不难(regex替换或者别的什么),但我想知道我是否缺少格式字符串的魔力。


Tags: 字符串格式符号数字科学thisregexquestion
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))

在我看来有点老套,但您可以使用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'

相关问题 更多 >