← Все вопросы

round(2.5) даёт 2, а не 3 — почему Python неправильно округляет?

Задан 22 месяца назад269 просмотров2 ответа
6

Проверяю округление:

print(round(2.5))   # 2
print(round(3.5))   # 4

Жду, что 2.5 округлится до 3, а получаю 2. При этом 3.5 нормально даёт 4. Это баг? Я вообще запутался.

2 ответа

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

Это не баг, а так называемое «округление к чётному» (банковское). Когда ровно .5, Python округляет к ближайшему чётному числу, чтобы не накапливалась ошибка при больших объёмах данных:

  • 2.5 → ближайшее чётное это 2
  • 3.5 → ближайшее чётное это 4

Для школьных задач, где нужно классическое «.5 всегда вверх», проще округлять явно:

import math
print(math.floor(2.5 + 0.5))   # 3

Или держи это правило в голове — на ЕГЭ/ОГЭ обычно как раз нужно обычное округление.

3

Маленькое дополнение: round(x, 2) округляет до 2 знаков после запятой — то же правило про .5 к чётному в граничных случаях, но на практике из-за неточности дробных чисел ты его почти не заметишь.

Ваш ответ

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