2015-04-03 5 views
4

мне удалось почти получить мой номер выхода отформатирован именно то, что мне нужно после прочтения некоторых документов по .format и разработке коды:Как использовать метод format() в python для ввода чисел после индекса E с нулями?

timepoint = 6 
strTimepoint = "{:1.7E}".format(timepoint) 

посредством печати strTimepoint будет выдавать это:

# with timepoint = 6 
>>6.0000000E+00 
# with timepoint = 12 
>>1.2000000E+01 

и так далее.

Единственное, что мне нужно сделать, чтобы сделать эту строку, мне нужно это для показателя цифры должны заполняться нулями на три цифры, следовательно:

# timepoint = 6 
>>6.0000000E+000 
# timepoint = 12 
>>1.2000000E+001 

Я не могу просто подушечка с нуля после факт, поскольку он должен быть адаптивным к числам, требующим более чем однозначных показателей. Мне не удалось найти документацию по этому вопросу, поэтому любая помощь по этой теме поможет вам, спасибо.

ответ

1

Похоже, что это невозможно без единого звонка str.format.

Это не будет так красиво, но вы можете просто добавить еще один:

# Regular Python's scientific notation, split up to coefficient and exponent. 
x, e = "{:1.7E}".format(timepoint).split("E") 

# Format again: coefficient first, then sign, then padded "sign-less" exponent. 
strTimepoint = "{}E{}{:0>3}".format(x, e[0], e[1:]) 

Обертывание все это в зависимости, конечно, настоятельно рекомендуется (настроить имя для ваших нужд):

def foo(timepoint): 
    # Regular Python's scientific notation, split up to coefficient and 
    # exponent. 
    x, e = "{:1.7E}".format(timepoint).split("E") 

    # Format again: coefficient first, then sign, then padded "sign-less" 
    # exponent. 
    return "{}E{}{:0>3}".format(x, e[0], e[1:]) 


foo(6) # '6.0000000E+000' 
foo(12) # '1.2000000E+001' 
foo(1e123) # '1.0000000E+123' 
1

Вы можете вставить 0 после факта с re.sub, но это будет иметь эффект удлинения строки на один символ в случае, когда замена происходит:

>>> re.compile("(E[-+])(\d\d)$").sub(r'\g<1>0\2',"{:7.1E}".format(6E19)) 
'6.0E+019' 

С форматом 7.1, что это не проблема, потому что, если показатель имел три цифры, минимальная длина поля будет 8:

>>> re.compile("(E[-+])(\d\d)$").sub(r'\g<1>0\2',"{:7.1E}".format(6E190)) 
'6.0E+190' 

Но в целом, это может произвести перекосы.

(Конечно, в реальном коде вы только один раз компилируете это регулярное выражение, а не каждый раз, когда выполняете преобразование.)