Как использовать форматирование строки, чтобы показать ОБА ведущие нули и точность 3? - PullRequest
27 голосов
/ 31 августа 2010

Я пытаюсь представить число с начальными и конечными нулями, чтобы общая ширина составляла 7, включая десятичную точку.Например, я хочу представить «5» как «005.000».Кажется, что форматирование строки позволит мне сделать одно или другое, но не оба.Вот вывод, который я получаю в Ipython, иллюстрирующий мою проблему:

In [1]: '%.3f'%5
Out[1]: '5.000'

In [2]: '%03.f'%5
Out[2]: '005'

In [3]: '%03.3f'%5
Out[3]: '5.000'

Строки 1 и 2 делают именно то, что я ожидал.Строка 3 просто игнорирует тот факт, что я хочу ведущие нули.Есть идеи?Спасибо!

Ответы [ 3 ]

47 голосов
/ 31 августа 2010

Первое число - это общее количество цифр, включая десятичную точку.

>>> '%07.3f' % 5
'005.000'
7 голосов
/ 31 августа 2010

[Редактировать: Гах, снова избит]

'%07.3F'%5

Первое число - общая ширина поля.

3 голосов
/ 13 сентября 2018

Мне потребовалась секунда, чтобы понять, как поступить способом @ nosklo, но с .format() и вложенностью.

Поскольку я не мог найти нигде другого примера, я делюсь здесь.

Пример использования "{}".format(a)

Python 2

>>> a = 5
>>> print "{}".format('%07.3F' % a)
005.000
>>> print("{}".format('%07.3F' % a))
005.000

Python 3

Подробнее python3 way, , созданный из документов ,но оба работают так, как задумано.

Обратите внимание на % против : и расположение формата в python3 отличается.

>>> a = 5
>>> print("{:07.3F}".format(a))
005.000
>>> a = 5
>>> print("Your Number is formatted: {:07.3F}".format(a))
Your Number is formatted: 005.000

Пример использования "{}".format(a) Вложенный

Затем, расширяя его, чтобы он соответствовал моему коду, он был вложен .format() s:

print("{}: TimeElapsed: {} Seconds, Clicks: {} x {} "
      "= {} clicks.".format(_now(),
                            "{:07.3F}".format((end -
                                               start).total_seconds()),
                            clicks, _ + 1, ((_ + 1) * clicks),
                            )
      )

, который форматирует все так, как я хотел.

Результат

20180912_234006: TimeElapsed: 002.475 Seconds, Clicks: 25 + 50 = 75 clicks.

Важные замечания:

  • @ babbitt: первое число - общая ширина поля.

  • @ meawoppl: Здесь также учитывается знак минус! ...

...