Отображение числа с плавающей запятой с двумя десятичными знаками в Python

136

У меня есть функция, принимающая аргументы с плавающей запятой (обычно целые или десятичные числа с одной значащей цифрой), и мне нужно вывести значения в строке с двумя десятичными знаками (5 -> 5.00, 5.5 -> 5.50 и т. Д.). Как я могу это сделать в Python?

MarathonStudios
источник

Ответы:

148

Для этого вы можете использовать оператор форматирования строки:

>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'

Результатом оператора является строка, поэтому вы можете сохранить ее в переменной, распечатать и т. Д.

NPE
источник
273

Поскольку этот пост может быть здесь какое-то время, давайте также укажем на синтаксис Python 3:

"{:.2f}".format(5)
Дарен Томас
источник
9
Для полноты d=3"{:.{}f}".format(5, d)
картины
74

Форматирование f-строки :

Это было нововведением в Python 3.6 - строка, как обычно, помещается в кавычки и добавляется f'...перед ней так же, как и r'...для необработанной строки. Затем вы помещаете все, что хотите поместить в свою строку, переменные, числа, в фигурные скобки f'some string text with a {variable} or {number} within that text'- и Python выполняет оценку так же, как и предыдущие методы форматирования строк, за исключением того, что этот метод гораздо более читабелен.

>>> a = 3.141592
>>> print(f'My number is {a:.2f} - look at the nice rounding!')

My number is 3.14 - look at the nice rounding!

Вы можете видеть в этом примере, что мы форматируем с десятичными знаками аналогично предыдущим методам форматирования строк.

NB aможет быть числом, переменной или даже выражением, например f'{3*my_func(3.14):02f}'.

Забегая вперед, с новым кодом я предпочитаю f-строки обычным методам% s или str.format (), поскольку f-строки могут быть намного более читаемыми и часто намного быстрее .

toonarmycaptain
источник
6

Форматирование строки:

print "%.2f" % 5
bradley.ayers
источник
1
Но все это строки, поэтому я не могу выполнять с ними какие-либо математические операции
itsaruns
@itsaruns Добавление пустых десятичных знаков не имеет значения, если вам просто нужно выполнить с ними математические операции. Вы можете искать math.floor, math.ceilилиround
Steen Schütt
5

Использование форматирования строки Python.

>>> "%0.2f" % 3
'3.00'
kevpie
источник
5

Форматирование строки:

a = 6.789809823
print('%.2f' %a)

ИЛИ

print ("{0:.2f}".format(a)) 

Функция раунда может использоваться:

print(round(a, 2))

В round () хорошо то, что мы можем сохранить этот результат в другой переменной, а затем использовать его для других целей.

b = round(a, 2)
print(b)
debaonline4u
источник
5
Проголосовать против round. Его не следует использовать только для демонстрации .
wim
@wim Я уважаю ваш комментарий, но эти ответы предназначены только для удовлетворения чьих-то требований.
debaonline4u
2
@ debaonline4u wim прав. round(5.0001, 2)-> 5.0, не'5.00'
wjandrea
3

Если вы действительно хотите изменить само число, а не только отображать его по-другому, используйте format ()

Отформатируйте его до двух знаков после запятой:

format(value, '.2f')

пример:

>>> format(5.00000, '.2f')
'5.00'
мистифицировать
источник
0

Я знаю, что это старый вопрос, но я изо всех сил пытался найти ответ. Вот что я придумал:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13
Василий Триандафилиди
источник
3
Привет, добро пожаловать в Stack Overflow. При ответе на вопрос, на который уже есть много ответов, обязательно добавьте дополнительное понимание того, почему ответ, который вы предоставляете, является существенным, а не просто повторяет то, что уже проверено оригинальным постером. Это особенно важно в ответах «только для кода», таких как ответ, который вы предоставили.
chb 08
-1

Использование синтаксиса Python 3:

print('%.2f' % number)
С. Рулофс
источник
1
% -форматирование не является новым для Python 3 и уже охвачено этим ответом 6 лет назад
wjandrea
-1

Если вы хотите получить значение с плавающей запятой с двумя десятичными знаками, ограниченными во время вызова input,

Проверьте это ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.
Картик Эланго
источник
Зачем evalверевка, когда можно было просто round? В любом случае это даже не работает должным образом, так как если вы кормите5 , вы получаете 5.0вместо того, 5.00что хочет OP.
wjandrea,
Это также не работает для nanи inf.
wjandrea