Как вы используете несколько аргументов в {} при использовании метода .format() в Python

Я хочу, чтобы таблица в python печаталась так:

Ясно, что я хочу использовать метод .format(), но у меня есть длинные числа с плавающей запятой, которые выглядят так: 1464.1000000000001 Мне нужно округлить числа с плавающей запятой, чтобы они выглядели так: 1464.10 (всегда два десятичных знака, даже если оба нули, поэтому я не могу использовать функцию round()).

Я могу округлить числа с плавающей запятой, используя "{0:.2f}".format("1464.1000000000001"), но тогда они не печатаются в красивые таблицы.

Я могу поместить их в красивые таблицы, выполнив "{0:>15}.format("1464.1000000000001"), но тогда они не будут округлены.

Есть ли способ сделать оба? Что-то вроде "{0:>15,.2f}.format("1464.1000000000001")?


person Keller Martin    schedule 10.10.2016    source источник
comment
Почти готово: "{0:>15.2f}".format(1464.1000000000001), вероятно, то, что вам нужно.   -  person    schedule 10.10.2016
comment
Не могли бы вы использовать round() внутри format()?   -  person Christian Dean    schedule 10.10.2016
comment
Много практических примеров на pyformat.info (рядом с файлом стандартная документация Python).   -  person    schedule 10.10.2016


Ответы (2)


Вы почти закончили, просто удалите запятую (и передайте число с плавающей запятой, а не строку):

"{0:>15.2f}".format(1464.1000000000001)

См. Мини-язык спецификации формата раздел:

format_spec ::=  [[fill]align][sign][#][0][width][,][.precision][type]
fill        ::=  <any character>
align       ::=  "<" | ">" | "=" | "^"
sign        ::=  "+" | "-" | " "
width       ::=  integer
precision   ::=  integer
type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Затем разбивая приведенный выше формат:

fill: <empty>
align: <  # left
sign: <not specified>
width: 15
precision: 2
type: `f`

Демо:

>>> "{0:>15.2f}".format(1464.1000000000001)
'        1464.10'

Обратите внимание, что для чисел по умолчанию используется выравнивание по правому краю, поэтому > можно опустить.

person Martijn Pieters    schedule 10.10.2016
comment
Вау, спасибо! Я только что сам решил проблему, выполнив две отдельные итерации .format(), и это было ужасно, это намного элегантнее. В гугле ничего не нашел по этому поводу, большое спасибо! - person Keller Martin; 10.10.2016

"{0:15.2f}".format(1464.1000000000001)

Я всегда нахожу этот сайт полезным для этого материала:

https://pyformat.info/

person B. Eckles    schedule 10.10.2016