Глиф Учебники

Как округлить число в Python

Справочник · Python · 1 минута чтения

Python
x = 3.14159
print(round(x, 2))
print(round(x))
print(f"{x:.2f}")
Вывод
3.14
3
3.14

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

Python
print(round(2.5))
print(round(3.5))
print(round(0.5))
print(round(-1.5))
Вывод
2
4
0
-2

Когда число ровно посередине, round выбирает чётное соседнее: 2.5 → 2, 3.5 → 4. Такое правило называют банковским округлением: при большом количестве округлений ошибки в обе стороны уравновешиваются. Это не ошибка Python, а так задумано.

Есть и вторая причина «странных» результатов — неточность дробных чисел. round(2.675, 2) даёт 2.67, а не 2.68: число 2.675 в памяти хранится как 2.67499999…, и оно честно округляется вниз.

Вверх, вниз, отбросить дробную часть

Python
import math

print(math.ceil(2.1))
print(math.floor(2.9))
print(math.floor(-2.1))
print(int(-2.9))
print(math.trunc(-2.9))
Вывод
3
2
-3
-2
-2
ФункцияЧто делаетПример
math.ceil(x)вверх, до ближайшего целого не меньше xmath.ceil(2.1) → 3
math.floor(x)вниз, до ближайшего целого не больше xmath.floor(-2.1) → −3
int(x), math.trunc(x)отбросить дробную частьint(-2.9) → −2

math.ceil нужен, например, чтобы посчитать, сколько автобусов нужно на 130 человек по 50 мест: math.ceil(130 / 50) даёт 3.

Округление по школьному правилу

Если нужно, чтобы 2.5 становилось 3, а 2.675 — 2.68, возьмите модуль decimal с правилом ROUND_HALF_UP:

Python
from decimal import Decimal, ROUND_HALF_UP

print(Decimal("2.5").quantize(Decimal("1"), rounding=ROUND_HALF_UP))
print(Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP))
x = 3.5
print(Decimal(str(x)).quantize(Decimal("1"), rounding=ROUND_HALF_UP))
Вывод
3
2.68
4

Округление до десятков и сотен

Отрицательное число знаков округляет слева от точки:

Python
print(round(1234, -1))
print(round(1234, -2))
print(round(1789, -3))
Вывод
1230
1200
2000

Для вывода или для расчётов

round возвращает число, и лишние нули на конце у него не пишутся. Если нужно ровно два знака — например, для цены, — используйте f-строку:

Python
price = 2.5
print(round(price, 2))
print(f"{price:.2f}")
Вывод
2.5
2.50

В расчётах округляйте только окончательный результат: если округлять на каждом шаге, ошибки накапливаются. Для денег, где важна каждая копейка, удобнее считать в целых копейках или через Decimal. Другие способы вывода — в справке f-строки и форматирование вывода.