Справочник по Python · модуль 1 · данные и имена
Глава 1.9
Функция round()
и форматирование .2f
Дробное число можно округлить для дальнейших вычислений или только аккуратно показать пользователю. Эти задачи похожи внешне, но решаются разными инструментами.
- Категория
- Числа и форматирование
- Уровень
- Начальный
- Связанные темы
- float, print(), f-строки, деление
- Зачем это знать
- Не путать изменение числа с оформлением вывода
§1Две разные задачи
После деления часто получается длинная дробь. Перед выбором инструмента задайте вопрос: округлённое число нужно использовать дальше или его нужно только показать на экране?
| Задача | Инструмент | Результат |
|---|---|---|
| получить округлённое число | round(value, 2) | число float |
| вывести ровно два знака | f"{value:.2f}" | строка str |
§2Функция round()
round() принимает число и количество знаков после десятичной точки.
pi = 3.14159 result = round(pi, 2) print(result) # 3.14 print(type(result)) # <class 'float'>
Исходная переменная pi не меняется. round() возвращает новое значение, поэтому результат нужно сохранить или сразу передать в print().
§3Округление до целого
Если второй аргумент не указан, round() возвращает целое число.
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 округляет к ближайшему чётному числу. Это уменьшает накопление ошибки при большом количестве округлений.
print(round(2.5)) # 2 print(round(3.5)) # 4 print(round(4.5)) # 4
Дробные числа хранятся приближённо, поэтому значение, которое выглядит как точная половина, внутри программы может быть немного меньше или больше неё. Для учебных задач достаточно помнить это свойство и проверять пограничные примеры.
§5Формат .2f
В f-строке запись .2f требует вывести число в формате float с двумя знаками после точки.
price = 12.5 pi = 3.14159 print(f"Цена: {price:.2f} руб.") # 12.50 print(f"π ≈ {pi:.2f}") # 3.14
Формат дописывает нули, если цифр не хватает. Это удобно для цен, процентов и таблиц, где числа должны выглядеть одинаково.
§6Число и строка
round() возвращает число, а f-строка — текст. Внешне результаты могут совпадать, но использовать их можно по-разному.
value = 3.14159 rounded = round(value, 2) formatted = f"{value:.2f}" print(rounded + 1) # 4.14 print(formatted + " м") # 3.14 м
Нельзя прибавить число к formatted, пока строка не преобразована обратно. Поэтому форматирование обычно оставляют на последний шаг — вывод пользователю.
§7Практический пример
Посчитаем среднюю стоимость одной покупки и выведем отчёт.
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Шпаргалка
round(value, n)round(value)f"{value:.2f}"f"{value:.3f}"Итог главы
round() нужен, когда программе требуется округлённое числовое значение. Формат .2f нужен, когда число следует показать с фиксированным количеством знаков. В вычислениях сохраняйте точность, а оформление выполняйте перед выводом.