Właśnie ponownie przeczytałem Co nowego w Pythonie 3.0 i stwierdza:
Zmieniono strategię zaokrąglania funkcji round () i typ zwracania. Dokładne przypadki w połowie są teraz zaokrąglane do najbliższego parzystego wyniku zamiast od zera. (Na przykład round (2.5) zwraca teraz 2 zamiast 3).
oraz dokumentacja do rundy :
W przypadku typów wbudowanych obsługujących funkcję round () wartości są zaokrąglane do najbliższej wielokrotności 10 do potęgi minus n; jeśli dwie wielokrotności są jednakowo zbliżone, następuje zaokrąglenie w kierunku parzystego wyboru
Tak więc w wersji 2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
jak bym się spodziewał. Jednak teraz w wersji 3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Wydaje się to sprzeczne z intuicją i sprzeczne z tym, co rozumiem o zaokrąglaniu (i potykaniu się o ludzi). Angielski nie jest moim językiem ojczystym, ale dopóki tego nie przeczytałem, wydawało mi się, że wiem, co oznacza zaokrąglenie: - / Jestem pewien, że w momencie wprowadzenia wersji 3 musiała o tym rozmawiać, ale nie mogłem znaleźć dobrego powodu w moje wyszukiwanie.
- Czy ktoś ma wgląd w to, dlaczego zmieniono to na to?
- Czy są jakieś inne popularne języki programowania (np. C, C ++, Java, Perl, ...), które wykonują tego rodzaju (dla mnie niespójne) zaokrąglanie?
Czego tu brakuje?
AKTUALIZACJA: @ Li-aungYip w komentarzu dotyczącym „Zaokrąglanie bankierów” dało mi właściwe wyszukiwane hasło / słowa kluczowe do wyszukania i znalazłem następujące pytanie SO: Dlaczego .NET domyślnie używa zaokrąglania bankierów? , więc będę to uważnie czytał.