Відобразить поплавок з двома десятковими знаками в Python


136

У мене є функція, що приймає плаваючі аргументи (як правило, цілі числа чи десяткові знаки з однією значущою цифрою), і мені потрібно вивести значення в рядку з двома знаками після коми (5 -> 5,00, 5,5 -> 5,50 тощо). Як я можу це зробити в Python?

Відповіді:


148

Ви можете використовувати для цього оператор форматування рядків:

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

Результатом оператора є рядок, тому ви можете зберігати його у змінній, друкувати тощо.


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-рядки можуть бути набагато більш читабельними і часто набагато швидшими .


6

Форматування рядків:

print "%.2f" % 5

1
Але все це є рядками, тому я не в змозі робити на них жодних математичних операцій
itaruns

@itsaruns Додавання порожніх десяткових знаків не має значення, якщо вам просто потрібно виконувати математичні операції над ними. Ви можете шукати math.floor, math.ceilабоround
Стін Шютт


4

Форматування рядків:

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

АБО

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

Кругла функція може бути використана:

print(round(a, 2))

Хороша річ у round () полягає в тому, що ми можемо зберегти цей результат в іншій змінній, а потім використовувати його для інших цілей.

b = round(a, 2)
print(b)

5
Довідка для round. Його не слід використовувати лише для відображення .
Вім

@wim Я поважаю ваш коментар, але ці відповіді просто задовольняють чиїсь вимоги.
debaonline4u

2
@ debaonline4u wim вірно. round(5.0001, 2)-> 5.0, ні'5.00'
wjandrea


3

Якщо ви дійсно хочете змінити саме число, а не відображати його по-іншому, використовуйте формат ()

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

format(value, '.2f')

приклад:

>>> format(5.00000, '.2f')
'5.00'

0

Я знаю, що це давнє питання, але я намагався знайти відповідь сам. Ось що я придумав:

Пітон 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. Відповідаючи на запитання, на яке вже є багато відповідей, будь ласка, не забудьте додати трохи додаткового розуміння того, чому відповідь, яку ви надаєте, є суттєвою, а не просто повторює те, що вже було перевірено оригінальним плакатом. Це особливо важливо у відповідях "лише для коду", таких як той, який ви надали.
чб


-1

Якщо ви хочете отримати значення з плаваючою комою з двома знаками після коми, обмеженими на момент введення дзвінка,

Перевірте це ~

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як хоче ОП.
wjandrea

Це також не працює для nanта inf.
wjandrea
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.