← Все вопросы
round, floor и ceil — в чём разница при округлении?
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.
Ваш ответ
Войдите, чтобы ответить на вопрос.