← Все вопросы
round(2.5) даёт 2, а не 3 — почему Python неправильно округляет?
6
Проверяю округление:
print(round(2.5)) # 2
print(round(3.5)) # 4
Жду, что 2.5 округлится до 3, а получаю 2. При этом 3.5 нормально даёт 4. Это баг? Я вообще запутался.
2 ответа
12
✓ Принятый ответ — помог автору
Это не баг, а так называемое «округление к чётному» (банковское). Когда ровно .5, Python округляет к ближайшему чётному числу, чтобы не накапливалась ошибка при больших объёмах данных:
2.5→ ближайшее чётное это23.5→ ближайшее чётное это4
Для школьных задач, где нужно классическое «.5 всегда вверх», проще округлять явно:
import math
print(math.floor(2.5 + 0.5)) # 3
Или держи это правило в голове — на ЕГЭ/ОГЭ обычно как раз нужно обычное округление.
3
Маленькое дополнение: round(x, 2) округляет до 2 знаков после запятой — то же правило про .5 к чётному в граничных случаях, но на практике из-за неточности дробных чисел ты его почти не заметишь.
Ваш ответ
Войдите, чтобы ответить на вопрос.