Відобразить поплавок з двома десятковими знаками в 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.