Я уверен, что делаю это правильно, но не получаю ожидаемых результатов от мини-языка Python 2.7.3. Я пытаюсь отформатировать вывод float до 3 целых значений и различного количества десятичных значений. Все работает, кроме целочисленных значений.Форматирование строки с плавающей запятой Python не работает
Сам по себе следующий код работает, чтобы получить меня 3 целочисленных значений ...
num = 3
value = '{:03}'.format(num)
returns '003'
И плавает работа ...
num = 3.12345
value = '{:01.2f}'.format(num)
returns '3.12'
Однако, комбинируя два, кажется, не работает должным образом. Десятичная точность работы, но целочисленной точности не ...
num = '3.12345'
value = '{:03.2f}'.format(num)
returns '3.12'
instead of the expected '003.12'
То же самое справедливо, если я попробовать любой из следующих форматов ...
value = '{:03.02f}'.format(num)
- or -
value = '{0:3.2f}'.format(num)
- or -
value = '{:3.02f}'.format(num)
- or -
value = '{0:3.02f}'.format(num)
- or -
value = '{0:03.2f}'.format(num)
- or -
value = '{0:03.02f}'.format(num)
- or -
value = '{:0>3.2f}'.format(num)
etc...
Which all return the same '3.12' instead of '003.12'
Если вы хотите знать, что Я делаю для переменной/динамической десятичной точности, необходимо сохранить все значения одинаковой длины, но разные наборы значений могут не иметь такой же точности. Итак, я беру меньше самого длинного точности значения или 10 и заставить других, чтобы соответствовать, как это ..
from decimal import Decimal
dVals = [
abs(Decimal(val1).as_tuple().exponent), # Get the number of decimal points
abs(Decimal(val2).as_tuple().exponent), # "" ""
abs(Decimal(val3).as_tuple().exponent), # "" ""
abs(Decimal(val4).as_tuple().exponent), # "" ""
]
p = max(dVals) # Get the largest value
p = min(p, 10) # Get the smaller of the largest value or 10
vals = [val1, val2, val3, val4]
for val in vals:
value = '{:0>3.{prec}f}'.format(val, prec = p)
# do whatever with value here...
Опять же, это все работает отлично, за исключением того, что целое значение никогда не возвращается с 3 точных мест, когда я совмещаю с плавающей точностью. Поэтому все мои усилия по обеспечению вывода значений с одинаковой форматированной длиной все напрасны. В конечном счете, результат должен выглядеть примерно так ...
'009.123456700'
'180.101010101'
'054.987654321'
Вместо этого он выглядит следующим образом ...
'9.123456700'
'180.101010101'
'54.987654321'
Другими словами, некрасиво. : - |
По крайней мере, я бы принял следующий вывод ...
' 9.123456700'
'180.101010101'
' 54.987654321'
Любые идеи, что я делаю неправильно здесь? Ваша помощь очень ценится!
Привет,
-RMWChaos
Вы должны попытаться укрепить свой вопрос сложнее ... – KurzedMetal
А, да, я склонен быть немного плодовитым мышлением больше информации лучше. Я сокращу свои вопросы в будущем. Благодаря! – RMWChaos