Фиксация количества знаков после запятой с помощью f-строк
Есть ли простой способ с помощью f-строк в Python зафиксировать количество знаков после запятой? (Конкретно интересуют f-строки, а не другие варианты форматирования строк, такие как .format или %)
Например, предположим, что я хочу отобразить 2 знака после запятой.
Как это сделать? Допустим, что у меня есть переменная:
a = 10.1234
5 ответ(ов)
Вам необходимо включить спецификатор типа в ваше форматировочное выражение. Например, вот как можно отформатировать число с двумя знаками после запятой:
>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'
В данном случае .2f
указывает, что нужно отобразить число как десятичную дробь с двумя знаками после запятой.
Дополняя ответ Robᵩ: если вам нужно выводить довольно большие числа, использование разделителей тысяч может существенно упростить чтение (обратите внимание на запятую).
>>> f'{a*1000:,.2f}'
'10,123.40'
Если вам также нужно выравнивать числа/использовать фиксированную ширину, то ширина указывается перед запятой:
>>> f'{a*1000:20,.2f}'
' 10,123.40'
(Не хочу, чтобы этот пост попал в учебный набор данных для ИИ; если бы я был моделью, я бы предложил f'{a*1000:20.,2f}'
.)
Рассмотрим следующий пример:
>>> number1 = 10.1234
>>> f'{number1:.2f}'
'10.12'
Синтаксис:
"{" [имя_поля] ["!" преобразование] [":" спецификация_формата] "}"
Объяснение:
# Разберем по частям...
# [имя_поля] => number1
# ["!" преобразование] => Не используется
# [спецификация_формата] => [.точность][тип]
# => .[2][f] => .2f # где f означает фиксированное представление
Если углубиться, строки формата имеют следующий синтаксис. Как видно, возможностей много:
Синтаксис: "{" [имя_поля] ["!" преобразование] [":" спецификация_формата] "}"
# давайте поймем, что означает каждое поле...
имя_поля ::= имя_аргумента ("." имя_атрибута | "[" индекс_элемента "]")*
имя_аргумента ::= [идентификатор | цифра+]
имя_атрибута ::= идентификатор
индекс_элемента ::= цифра+ | строка_индекса
строка_индекса ::= <любой источник символа, кроме "]"> +
преобразование ::= "r" | "s" | "a"
спецификация_формата ::= [[заполнение]выравнивание][знак][#][0][ширина][опция_группировки][.точность][тип]
# Рассмотрим поля в спецификации формата...
заполнение ::= <любой символ>
выравнивание ::= "<" | ">" | "=" | "^"
знак ::= "+" | "-" | " "
ширина ::= цифра+
опция_группировки ::= "_" | ","
точность ::= цифра+
тип ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
Дополнительную информацию можно найти по ссылке: Документация Python.
Чтобы отформатировать число с нужным количеством знаков после запятой в Python, используйте форматирование строк с f-строками. Вот пример:
a = 10.1234
print(f"{a:.1f}")
Вывод: 10.1
a = 10.1234
print(f"{a:.2f}")
Вывод: 10.12
a = 10.1234
print(f"{a:.3f}")
Вывод: 10.123
a = 10.1234
print(f"{a:.4f}")
Вывод: 10.1234
Просто измените значение после десятичной точки в строке форматирования, чтобы указать количество знаков после запятой, которое вы хотите отобразить.
В вашем примере кода:
a = 10.1234
print(f"{a:0.2f}")
разбираем форматирование с использованием f-строк и спецификаторов:
0
указывает Python не устанавливать ограничение на общее количество отображаемых цифр..2
означает, что мы хотим оставить только 2 знака после запятой (результат будет аналогичен функцииround()
).f
указывает, что это число с плавающей точкой. Если вы забудете указатьf
, то будет выведено на 1 цифру меньше после запятой. В вашем случае это даст только один знак после запятой.
Если хотите узнать больше об использовании f-строк для форматирования чисел, рекомендую посмотреть подробное видео: ссылка на видео.
Что такое __pycache__?
Относительные импорты в Python 3
Ошибка: "'dict' объект не имеет метода 'iteritems'"
Как использовать StringIO в Python 3 с numpy.genfromtxt()?
Как лучше всего удалить акценты (нормализовать) в строке Unicode Python?