Как работает этот код форматирования? - PullRequest
0 голосов
/ 06 января 2010

Мне всегда нужно знать, почему, а не просто как, вот и я:

Как это работает:

'{0:01.2f}'.format(5.555)  #returns '5.55'

'{0:01.1f}'.format(5.555)  #returns '5.5'

'{0:1.2f}'.format(5.555)   #returns '5.55' again

'{0:1.1f}'.format(5.555)   #returns '5.5' again

Почему это не добавляет заполнение нулями, возвращая '05 .5' вместо просто '5.5', когда у меня есть дополнительный ноль. Это просто не похоже на работу.

Кроме того, почему строка 0: 1.1f вместо 0: 0.1f и т. Д. Является ли условным использование числа 1 перед десятичной дробью вместо нуля, или это синтаксис

Ответы [ 2 ]

6 голосов
/ 06 января 2010

Это потому, что символ 0 включает заполнение нулями, но у вас есть ширина 1 набор. Установите ширину 2 (например, '{0:02.1f}', и вы увидите начальный 0.

Редактировать - на самом деле, я не уверен, будет ли достаточно 2, потому что я не знаю, как он ведет себя с большим количеством цифр после десятичной точки. Поэтому, чтобы быть в безопасности, сделайте что-то вроде 5 и посмотрите, что он делает потом.

Редактировать 2 - хорошо, я только что попробовал. Ширина соответствует ВСЕЙ ширине, включая все цифры и десятичную точку. Итак, вы получите это:

>>> '{0:05.2f}'.format(5.555)
'05.55'

Обратите внимание, что общая длина строки теперь равна 5, с ведущим 0, потому что заполнение нулями включено, и что оно усекается до 2 цифр после десятичной точки из-за .2

2 голосов
/ 06 января 2010

Вы должны указать ширину с учетом всех символов, включая десятичные дроби и точку. Если вы хотите 05.55, это 5 символов, поэтому:

>>>'{0:05.2f}'.format(5.555)
'05.55'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...