如何避免在不添加额外数字的情况下用python打印科学符号?
询问如何抑制python中的科学符号 我有一系列的数字要显示——小的10次方——我想显示它们,不带尾随的零。即0.1、0.01,依此类推至0.000001 如果我做了如何避免在不添加额外数字的情况下用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.
%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
方法所示。