如何获得以下格式(输入值始终小于0.1):
> formatting(0.09112346)
0.91123E-01
> formatting(0.00112346)
0.11234E-02
等等。
我正在寻找一些优雅的解决方案。我已经在使用下面给出的自定义函数:
def formatting(x, prec=5):
tup = x.as_tuple()
digits = list(tup.digits[:prec])
dec = ''.join(str(i) for i in digits)
exp = x.adjusted()
return '0.{dec}E{exp}'.format(dec=dec, exp=exp)
format()
功能。 格式规范在那里提到:
'E' - 指数表示法。与“e”相同,只是它使用大写“E”作为分隔符。
>>> print('{:.5E}'.format(0.09112346))
9.11235E-02
>>> print('{:.5E}'.format(0.00112346))
1.12346E-03
但是,它与您答案中的输出不太一样。如果上述内容不令人满意,那么您可以使用自定义函数来提供帮助(我在这方面不是最擅长的,所以希望没问题):
def to_scientific_notation(number):
a, b = '{:.4E}'.format(number).split('E')
return '{:.5f}E{:+03d}'.format(float(a)/10, int(b)+1)
print(to_scientific_notation(0.09112346))
# 0.91123E-01
print(to_scientific_notation(0.00112346))
# 0.11234E-02
在 Python 3.6+ 中,您还可以使用 f-strings。例如:
In [31]: num = 0.09112346
In [32]: f'{num:.5E}'
Out[32]: '9.11235E-02'
它使用与
str.format()
相同的语法,在格式规范迷你语言部分中给出。
编辑:
f'{num:.5E}'
将始终以归一化科学记数法返回数字,这意味着返回数字m
中[m]E[n]
(=有效数字)的绝对值始终在1和10之间。
如果您想强制尾数的绝对值 (
m
) 介于 0.1 和 1 之间 (0.1 <= |m| < 1.0), then you have to use a custom solution.
格式化标准化科学记数法的另一个语法选项:
number = 0.09112346
string = '%.5E' % number
# 9.11235E-02