Python中的科学符号格式



如何获得以下格式(输入值总是小于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-string。例如:

In [31]: num = 0.09112346
In [32]: f'{num:.5E}'
Out[32]: '9.11235E-02'

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


编辑

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

如果要强制有效位(m(的绝对值介于0.1和1之间(0.1<=|m|<1.0(,则必须使用自定义解决方案。

格式化标准化科学表示法的另一个语法选项:

number = 0.09112346
string = '%.5E' % number
# 9.11235E-02

相关内容

  • 没有找到相关文章

最新更新