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

如何避免在不添加额外数字的情况下用python打印科学符号?,python,floating-point,string-formatting,Python,Floating Point,String Formatting,询问如何抑制python中的科学符号 我有一系列的数字要显示——小的10次方——我想显示它们,不带尾随的零。即0.1、0.01,依此类推至0.000001 如果我做了%s”%10**-6我会得到'1e-06'。如果我使用%f“%10**-6我会得到'0.000001',这正是我想要的 但是,%f“%10**-3生成的'0.001000'违反了“无尾随零”约束 用蛮力解决这个问题并不难(regex替换或其他什么),但我想知道我是否缺少了一些格式字符串魔法。在我看来,这有点老套,但你可以使用str.

询问如何抑制python中的科学符号

我有一系列的数字要显示——小的10次方——我想显示它们,不带尾随的零。即0.1、0.01,依此类推至0.000001

如果我做了
%s”%10**-6
我会得到
'1e-06'
。如果我使用
%f“%10**-6
我会得到
'0.000001'
,这正是我想要的

但是,
%f“%10**-3
生成的
'0.001000'
违反了“无尾随零”约束


用蛮力解决这个问题并不难(regex替换或其他什么),但我想知道我是否缺少了一些格式字符串魔法。

在我看来,这有点老套,但你可以使用
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'
简单的
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))
def格式\u浮点(值,精度=-1):
如果精度<0:
f=“%f”%value
其他:
f=“%.*f”%(精度,值)
p=f.分区(“.”)
s=”“.join((p[0],p[1],p[2][0],p[2][1:][.rstrip(“0”))
返回s
打印(格式为浮点数(3e-10))
打印(格式为浮点数(3e-10,20))
打印(格式为浮点数(1.5e-6))
打印(格式为浮点数(1.5e+6))

这就是OP所说的“暴力解决问题的方法”,所以这不是一个真正的答案(-1)。然而,我也会这样做(+1)。+1。一点也不黑。也许使用
format()
函数会稍微干净一点:
format(1e-6,'f').rstrip('0')
@Oben-Sonne,但它比使用regex要好得多@费迪南德·拜尔,谢谢,我不知道,修改答案。这没那么糟糕;我忘记了
rstrip
需要一个arg作为要删除的字符。更长版本的utdemirs回答:没有格式字符串选项。你必须自己写一个解决方案。这并不坏,因为解决方案非常简单,正如utdemirs使用
rstrip
方法所示。