Python

Round в Python: как округлять числа до целого, сотых и нужного количества знаков

round() — встроенная функция Python для округления чисел. Если передать только число, Python округлит его до ближайшего целого, а если передать второй аргумент, можно указать количество знаков после запятой

print(round(3.14159))
print(round(3.14159, 2))

Вывод

3
3.14

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

Как округлить до целого

value = 12.7
result = round(value)

print(result)

Вывод

13

Если число ближе к меньшему целому, результат будет меньше

print(round(12.2))

Вывод

12

Такой вариант подходит, когда вам нужен именно целый результат: количество штук, приблизительная оценка, округленная статистика

Как округлить до сотых

Сотые — это два знака после запятой. Для этого вторым аргументом передают 2

price = 19.987
print(round(price, 2))

Вывод

19.99

До десятых — 1, до тысячных — 3

number = 3.14159

print(round(number, 1))
print(round(number, 2))
print(round(number, 3))

Вывод

3.1
3.14
3.142

Почему round(2.5) дает 2

В Python может удивить такой пример

print(round(2.5))
print(round(3.5))

Вывод

2
4

Это не ошибка. Python использует округление к ближайшему четному, когда число находится ровно посередине между двумя вариантами. Поэтому 2.5 идет к 2, а 3.5 — к 4. Такое поведение снижает статистическое смещение при большом количестве округлений, но для новичка выглядит непривычно

Если вам нужно другое правило округления, например всегда «половину вверх», стоит смотреть в сторону модуля decimal, особенно для финансовых расчетов

Почему с float бывают странности

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

print(round(2.675, 2))

Может получиться

2.67

Причина не в том, что Python «плохо округляет», а в том, что число 2.675 внутри компьютера хранится как близкое двоичное приближение. Для обычных учебных задач это можно принять, а для денег лучше использовать decimal.Decimal

Как красиво вывести число с двумя знаками

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

price = 19.9
print(f"{price:.2f}")

Вывод

19.90

Разница важная: round(19.9, 2) вернет число 19.9, а форматирование покажет строку 19.90. Для чеков, таблиц и интерфейса это часто именно то, что нужно

Округление вниз и вверх

round() округляет к ближайшему значению. Если нужно всегда вниз или всегда вверх, используйте math.floor() и math.ceil()

import math

print(math.floor(3.9))
print(math.ceil(3.1))

Вывод

3
4

floor() всегда идет вниз, ceil() всегда идет вверх. Это отдельные инструменты, их не стоит путать с обычным округлением

Мини-задача

Пусть пользователь вводит стоимость товара и процент скидки. Нужно вывести итоговую цену с двумя знаками после запятой

price = float(input("Цена: "))
discount = float(input("Скидка в процентах: "))

final_price = price - price * discount / 100

print("Итог:", round(final_price, 2))
print(f"Итог для чека: {final_price:.2f}")

Так вы увидите разницу между числом после round() и красивым текстовым выводом через форматирование

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

Ожидал 10.00, получил 10.0

round() возвращает число, а не строку для красивого вывода. Если нужны два знака после запятой, используйте форматирование

print(f"{value:.2f}")

Округление .5 работает не так, как в школе

Python округляет ровную половину к ближайшему четному. Это нормальное поведение встроенной функции round()

Использую round() для денег и получаю странности

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

Что почитать дальше по Python

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

Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные

Настройки cookie

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x