Модуль 1 · Данные и имена

Справочник по Python · модуль 1 · данные и имена

Глава 1.9

1.9

Функция round()
и форматирование .2f

Дробное число можно округлить для дальнейших вычислений или только аккуратно показать пользователю. Эти задачи похожи внешне, но решаются разными инструментами.

Категория
Числа и форматирование
Уровень
Начальный
Связанные темы
float, print(), f-строки, деление
Зачем это знать
Не путать изменение числа с оформлением вывода

§1Две разные задачи

После деления часто получается длинная дробь. Перед выбором инструмента задайте вопрос: округлённое число нужно использовать дальше или его нужно только показать на экране?

ЗадачаИнструментРезультат
получить округлённое числоround(value, 2)число float
вывести ровно два знакаf"{value:.2f}"строка str

§2Функция round()

round() принимает число и количество знаков после десятичной точки.

Pythonround(число, знаки)
pi = 3.14159
result = round(pi, 2)

print(result)        # 3.14
print(type(result))  # <class 'float'>

Исходная переменная pi не меняется. round() возвращает новое значение, поэтому результат нужно сохранить или сразу передать в print().

§3Округление до целого

Если второй аргумент не указан, round() возвращает целое число.

main.pyбез второго аргумента
print(round(3.4))  # 3
print(round(3.6))  # 4
print(type(round(3.6)))  # <class 'int'>

Запись round(value, 0) выглядит похоже, но возвращает float: например, round(3.6, 0) даёт 4.0.

§4Правило для половин

Значения ровно посередине Python округляет к ближайшему чётному числу. Это уменьшает накопление ошибки при большом количестве округлений.

Pythonполовина — к чётному
print(round(2.5))  # 2
print(round(3.5))  # 4
print(round(4.5))  # 4
Почему иногда результат удивляет

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

§5Формат .2f

В f-строке запись .2f требует вывести число в формате float с двумя знаками после точки.

main.pyфиксированное число знаков
price = 12.5
pi = 3.14159

print(f"Цена: {price:.2f} руб.")  # 12.50
print(f"π ≈ {pi:.2f}")             # 3.14

Формат дописывает нули, если цифр не хватает. Это удобно для цен, процентов и таблиц, где числа должны выглядеть одинаково.

§6Число и строка

round() возвращает число, а f-строка — текст. Внешне результаты могут совпадать, но использовать их можно по-разному.

Pythonпроверка типа
value = 3.14159
rounded = round(value, 2)
formatted = f"{value:.2f}"

print(rounded + 1)       # 4.14
print(formatted + " м") # 3.14 м

Нельзя прибавить число к formatted, пока строка не преобразована обратно. Поэтому форматирование обычно оставляют на последний шаг — вывод пользователю.

§7Практический пример

Посчитаем среднюю стоимость одной покупки и выведем отчёт.

main.pyрасчёт и вывод
total = 1250
orders = 6
average = total / orders

# В вычислениях остаётся полное значение average.
with_discount = average * 0.9

print(f"Средний чек: {average:.2f} руб.")
print(f"После скидки: {with_discount:.2f} руб.")
Выводрезультат запуска
Средний чек: 208.33 руб.
После скидки: 187.50 руб.

Промежуточные значения не округляются. Так ошибка округления не накапливается, а пользователь всё равно видит аккуратные суммы.

§8Частые ошибки

Что написаноЧто произойдётКак правильно
round(x, 2) без сохраненияпеременная x не изменитсяx = round(x, 2), если нужен новый результат
f"{price.2f}"SyntaxError: пропущено двоеточиеf"{price:.2f}"
round(12.5, "2")TypeError: количество знаков записано строкойround(12.5, 2)
round(2.5), ожидая 3получится 2 по правилу ближайшего чётногоучитывать правило на половинах
округлять после каждого действияошибка постепенно накапливаетсяокруглять итог или форматировать только вывод

§9Проверьте себя

Чем round(value, 2) отличается от f"{value:.2f}"?

round() возвращает число, пригодное для вычислений. F-строка создаёт текст для вывода и всегда показывает два знака.

Что выведет print(f"{12.5:.2f}")?

12.50. Формат допишет ноль до двух знаков после точки.

Почему лучше не округлять каждый промежуточный результат?

Каждое округление теряет часть точности. Если таких шагов много, потери складываются.

§10Шпаргалка

Число до n знаковround(value, n)
До целогоround(value)
Два знака в выводеf"{value:.2f}"
Три знака в выводеf"{value:.3f}"

Итог главы

round() нужен, когда программе требуется округлённое числовое значение. Формат .2f нужен, когда число следует показать с фиксированным количеством знаков. В вычислениях сохраняйте точность, а оформление выполняйте перед выводом.

Глава 1.9 · round() и форматирование .2f · Справочник по Python Автор: Макаров Максим Николаевич