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

322

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

  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
hobbes3
источник

Ответы:

500
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Это количество цифр после запятой.
Свен Марнах
источник
12
Итак, я понимаю, что 4f представляет ограничение десятичных чисел до 4 (с конечными нулями), но что означает 10? Означает ли это, что это форматирование не будет работать с целыми числами больше, чем 9999999999 (десять 9)? Просто любопытно.
hobbes3
55
10.4означает ширину 10 символов и точность 4 десятичных знака.
MRAB
13
@ hobbes3: 10минимальная ширина поля, то есть минимальная длина напечатанной строки. Числа по умолчанию выровнены по правому краю и дополнены пробелами - более подробную информацию смотрите в документации .
Свен Марнач
9
Для Питонов до 2.7:("%0.4f" % x).rjust(10)
Стивен Румбальски
22
@StevenRumbalski: Или просто "%10.4f" % x. В Python 2.6 вы также можете использовать "{0:10.4f}".format(x).
Свен Марнач
88

Прошло несколько лет с тех пор, как на них был дан ответ, но начиная с 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
artomason
источник
2
Обратите внимание, что ширина также включает в себя символ точки. Таким образом, если вы указали 9 в качестве ширины, 1 будет использоваться для печати точки, а остальные 8 будут для печати цифр и пробелов.
off99555
37

В python3 работает следующее:

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4
Скотт Робертс
источник
Это изменилось за последние 4 года, в настоящее время %форматирование является старейшим методом форматирования. По нескольким причинам использование str.formatили f-stringsявляется предпочтительным %. Ранее, когда это было только str.format, у людей были некоторые причины, но f-stringsисправляли эту дыру. отформатировать мини-языковые документы , примеры str.format из документов и примеры из строковых литералов в документах
ninMonkey
6

Вы также можете оставить блокнот с нулями. Например, если вы хотите numberиметь длину 9 символов, слева добавьте нули:

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

Таким образом, если number = 4.656вывод:00004.656

Для вашего примера вывод будет выглядеть так:

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

печатает:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

Один пример, где это может быть полезно, - это когда вы хотите правильно перечислить имена файлов в алфавитном порядке. Я заметил, что в некоторых системах Linux это число: 1,10,11, .. 2,20,21, ...

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

elcymon
источник
2

В Python 3.

GPA = 2.5
print(" %6.1f " % GPA)

6.1fсредство после точек 1 цифра показывает , если вы печатаете 2 цифры после точки следует только %6.2fтаким образом, что %6.3f3 цифры печатаемой после точки.

Усман Зия
источник
0

Мне нужно что-то подобное для массивов. Это помогло мне

some_array_rounded=np.around(some_array, 5)
Антон
источник