научная нотация python с принудительным начальным нулем

Я хочу, чтобы Python2.7 распечатывал числа с плавающей запятой в экспоненциальном представлении, вынужденные начинать с 0. Например, предположим

a=1234567890e12
print '{:22.16E}'.format(a)
1.2345678900000000E+21

Однако я хочу, чтобы вывод на печать выглядел так:

0.1234567890000000E+22

Обратите внимание, что показатель степени увеличивается на единицу, поскольку желаемый результат принудительно равен начальному нулю. Как я могу этого добиться? Спасибо.


person Ehsan    schedule 21.01.2014    source источник
comment
Интересно, а зачем вам это? Это не является стандартом для научных обозначений en.wikipedia.org/wiki/Scientific_notation.   -  person FuriousGeorge    schedule 21.01.2014
comment
Мне нужно сделать два разных файла вполне совместимыми цифра за цифрой. Один написан Fotran 90 с форматом записи типа: 1pd26.16   -  person Ehsan    schedule 21.01.2014


Ответы (3)


Что ж, поскольку то, что вы хотите сделать, не является «стандартной» научной записью, я не уверен, что для этого есть простой вызов. Однако вот хак, который сработает

a = 1234567890e12
A = str(a)
exp = A.find('e+')
converted = '0.' + A[0] + A[2:exp] + 'e+' + str(int(A[exp+2:])+1)
person FuriousGeorge    schedule 21.01.2014

Пакет fortranformat сделает то, что вы ищете.

import fortranformat as ff

a=1234567890e12
lineformat = ff.FortranRecordWriter('(1E26.16)')
lineformat.write([a])

Выход:

'    0.1234567890000000E+22'
person Greg    schedule 09.03.2015

Ручки E- также.

def fortranFormat(n):
    a = '{:.4E}'.format(float(n))
    e = a.find('E')
    return '0.{}{}{}{:02d}'.format(a[0],a[2:e],a[e:e+2],abs(int(a[e+1:])*1+1))

print(fortranFormat('60.505'))
print(fortranFormat('74.705'))
print(fortranFormat('2.000000E-09'))

выход:

0.60505E+02
0.74705E+02
0.20000E-08
person xelf    schedule 13.02.2020