Вопрос-Ответ

How to format a floating number to fixed width in Python

Как отформатировать плавающее число до фиксированной ширины в Python

Как мне отформатировать плавающее число до фиксированной ширины со следующими требованиями:


  1. Начальный ноль, если n < 1

  2. Добавьте завершающий десятичный ноль (ы), чтобы заполнить фиксированную ширину

  3. Обрезать десятичные цифры сверх фиксированной ширины

  4. Выровнять все десятичные точки

Например:

% formatter something like '{:06}'
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
print formatter.format(number)

Результат будет выглядеть следующим образом

  23.2300
0.1233
1.0000
4.2230
9887.2000
Переведено автоматически
Ответ 1
numbers = [23.23, 0.1233, 1.0, 4.223, 9887.2]                                                                                                                                                   

for x in numbers:
print("{:10.4f}".format(x))

С принтами

   23.2300
0.1233
1.0000
4.2230
9887.2000

Спецификатор формата внутри фигурных скобок соответствует синтаксису строки формата Python. В частности, в данном случае он состоит из следующих частей:


  • Пустая строка перед двоеточием означает "принять следующий предоставленный аргумент в format()" – в данном случае x в качестве единственного аргумента.

  • 10.4fЧасть после двоеточия - это спецификация формата.

  • f обозначает запись с фиксированной запятой.

  • 10 - это общая ширина печатаемого поля, с добавлением пробелов слева.

  • 4 - это количество цифр после запятой.

Ответ 2

Прошло несколько лет с тех пор, как на этот вопрос был дан ответ, но начиная с Python 3.6 (PEP498) вы могли использовать новый f-strings:

numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
print(f'{number:9.4f}')

С принтами:

  23.2300
0.1233
1.0000
4.2230
9887.2000
Ответ 3

In python3 the following works:

>>> v=10.4
>>> print('% 6.2f' % v)
10.40
>>> print('% 12.1f' % v)
10.4
>>> print('%012.1f' % v)
0000000010.4
Ответ 4

You can also left pad with zeros. For example if you want number to have 9 characters length, left padded with zeros use:

print('{:09.3f}'.format(number))

Thus, if number = 4.656, the output is: 00004.656

For your example the output will look like this:

numbers  = [23.2300, 0.1233, 1.0000, 4.2230, 9887.2000]
for x in numbers:
print('{:010.4f}'.format(x))

prints:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

One example where this may be useful is when you want to properly list filenames in alphabetical order. I noticed in some linux systems, the number is: 1,10,11,..2,20,21,...

Thus if you want to enforce the necessary numeric order in filenames, you need to left pad with the appropriate number of zeros.

python string