Форматирование научной нотации в Python - PullRequest
0 голосов
/ 13 ноября 2018

Как получить следующее форматирование (входные значения всегда меньше 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)

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете использовать функцию 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
...