Как округлить число в Python
x = 3.14159
print(round(x, 2))
print(round(x))
print(f"{x:.2f}")3.14
3
3.14round(x, n)— округлить доnзнаков после точки, результат — число;round(x)— до целого, результат —int;f"{x:.2f}"— запись числа строкой с двумя знаками после точки: округляется только запись, переменнаяxне меняется. Для вывода на экран это удобнее всего.
Почему round(2.5) даёт 2
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…, и оно честно округляется вниз.
Вверх, вниз, отбросить дробную часть
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) | вверх, до ближайшего целого не меньше x | math.ceil(2.1) → 3 |
math.floor(x) | вниз, до ближайшего целого не больше x | math.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:
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
4quantize(Decimal("0.01"))— округлить до сотых,Decimal("1")— до целых;- число передают в
Decimalстрокой:Decimal(str(x)).Decimal(2.675)без кавычек получит то самое неточное 2.67499999… и округлит вниз; - отрицательные числа это правило округляет от нуля: −2.5 → −3.
Округление до десятков и сотен
Отрицательное число знаков округляет слева от точки:
print(round(1234, -1))
print(round(1234, -2))
print(round(1789, -3))1230
1200
2000Для вывода или для расчётов
round возвращает число, и лишние нули на конце у него не пишутся. Если нужно ровно два знака — например, для цены, — используйте f-строку:
price = 2.5
print(round(price, 2))
print(f"{price:.2f}")2.5
2.50В расчётах округляйте только окончательный результат: если округлять на каждом шаге, ошибки накапливаются. Для денег, где важна каждая копейка, удобнее считать в целых копейках или через Decimal. Другие способы вывода — в справке f-строки и форматирование вывода.