Python 中的科学记数法格式

ARK*_*579 10 python formatting scientific-notation

如何获得以下格式(输入值始终小于 0.1):

> formatting(0.09112346)
0.91123E-01
> formatting(0.00112346)
0.11234E-02
Run Code Online (Sandbox Code Playgroud)

等等。

我正在寻找一些优雅的解决方案。我已经在使用下面给出的自定义函数:

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)
Run Code Online (Sandbox Code Playgroud)

Jer*_*rry 11

您可以使用该format()功能。格式规范在那里提到了它:

'E' - 指数符号。与 'e' 相同,但它使用大写的 'E' 作为分隔符。

>>> print('{:.5E}'.format(0.09112346))
9.11235E-02
>>> print('{:.5E}'.format(0.00112346))
1.12346E-03
Run Code Online (Sandbox Code Playgroud)

但是,它与您在答案中的输出不太一样。如果以上不满意,那么您可以使用自定义函数来提供帮助(我不是最擅长的,所以希望没问题):

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
Run Code Online (Sandbox Code Playgroud)

  • @ ARK4579 嗯,对不起,你读了整个答案吗?第二部分给出了您要求的格式(0.91123E-01 和 0.11234E-02)还是我遗漏了什么? (2认同)

np8*_*np8 11

在 Python 3.6+ 中,您还可以使用f-strings。例如:

In [31]: num = 0.09112346

In [32]: f'{num:.5E}'
Out[32]: '9.11235E-02'
Run Code Online (Sandbox Code Playgroud)

它使用与格式规范迷你语言str.format()部分中给出的相同的语法。


编辑

将始终以标准化科学记数法f'{num:.5E}'返回数字,这意味着返回数字中 (=有效位数)的绝对值始终在 1 到 10 之间。m[m]E[n]

如果您想强制尾数 ( ) 的绝对值m介于 0.1 和 1 之间 (0.1 <= |m| < 1.0),则必须使用自定义解决方案。