Я щойно перечитував, що нового в Python 3.0, і в ньому зазначається:
Стратегія округлення функцій round () та тип повернення змінилися. Точні випадки на півдорозі округляються до найближчого рівного результату, а не від нуля. (Наприклад, круглий (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
як я і очікував. Однак зараз під версією 3.2.2 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Це здається контрінтуїтивним і суперечить тому, що я розумію про округлення (і обов'язково подорожує людей). Англійська мова не є моєю рідною мовою, але, поки я не прочитав це, я подумав, що знаю, що означає округлення: - / я впевнений, що в момент введення v3 там, мабуть, було обговорено це, але я не зміг знайти вагому причину в мій пошук.
- Хтось має розуміння, чому це було змінено на це?
- Чи існують інші мови програмування (наприклад, C, C ++, Java, Perl, ..), які роблять таке (для мене непослідовне) округлення?
Що я тут пропускаю?
ОНОВЛЕННЯ: @ коментар Li-aungYip щодо "Округлення банкіра" дав мені правильний пошуковий термін / ключові слова для пошуку, і я знайшов це ТАКЕ питання: Чому .NET використовує округлення банкіра за замовчуванням? , тому я буду це уважно читати.