Я только что перечитал Что нового в Python 3.0 и в нем говорится:
Функция округления () и стратегия возврата изменены. Точные полпути теперь округляются до ближайшего четного результата, а не от нуля. (Например, раунд (2.5) теперь возвращает 2, а не 3.)
и документация для тура :
Для встроенных типов, поддерживающих round (), значения округляются до ближайшего кратного 10 к степени минус n; если два множителя одинаково близки, округление выполняется до четного выбора
Итак, под v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
как я и ожидал. Однако теперь под v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Это кажется нелогичным и противоречит тому, что я понимаю о округлении (и обманываю людей). Английский не является моим родным языком, но пока я не прочитал это, я думал, что знаю, что означает округление: - / Я уверен, что во время введения v3, должно быть, было некоторое обсуждение этого, но я не смог найти вескую причину в мой поиск.
- Кто-нибудь знает, почему это было изменено на это?
- Существуют ли другие основные языки программирования (например, C, C ++, Java, Perl, ...), которые делают такое (для меня непоследовательное) округление?
Что мне здесь не хватает?
ОБНОВЛЕНИЕ: @ Li-aungYip комментарий о «округлении банкира» дал мне правильный поисковый запрос / ключевые слова для поиска, и я нашел такой SO вопрос: Почему .NET использует округление банкира по умолчанию? так что я буду внимательно это читать.