← Все вопросы

round, floor и ceil — в чём разница при округлении?

Задан 1 месяц назад1.3к просмотров2 ответа
6

Запутался в округлении. Есть round(), а ещё видел math.floor и math.ceil. Чем они отличаются и что когда брать?

2 ответа

10
✓ Принятый ответ — помог автору

Три разных поведения:

  • round(x) — округляет к ближайшему целому (3.4 → 3, 3.6 → 4)
  • math.floor(x) — всегда вниз (3.9 → 3, -1.1 → -2)
  • math.ceil(x) — всегда вверх (3.1 → 4, -1.9 → -1)
import math
print(round(3.6))      # 4
print(math.floor(3.9)) # 3
print(math.ceil(3.1))  # 4

У round есть второй аргумент — число знаков после запятой: round(3.14159, 2) даёт 3.14.

Отдельная ловушка: round использует «банковское округление», поэтому round(2.5) даёт 2, а не 3. Это нормально, не баг.

3

Лайфхак: округление вниз для положительных чисел можно сделать без импорта — через целочисленное деление: 7 // 2 сразу даёт 3, как floor. А int(3.9) тоже отбрасывает дробную часть (= floor для положительных), но для отрицательных ведёт себя иначе, чем math.floor.

Ваш ответ

Войдите, чтобы ответить на вопрос.