Je lisais juste les nouveautés de Python 3.0 et il dit:
La stratégie d'arrondi de la fonction round () et le type de retour ont changé. Les observations à mi-chemin exactes sont désormais arrondies au résultat pair le plus proche au lieu de s'éloigner de zéro. (Par exemple, round (2.5) renvoie désormais 2 au lieu de 3.)
et la documentation pour le tour :
Pour les types intégrés prenant en charge round (), les valeurs sont arrondies au multiple le plus proche de 10 à la puissance moins n; si deux multiples sont également proches, l'arrondi est effectué vers le choix pair
Donc, sous v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
comme je m'y attendais. Cependant, maintenant sous la v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Cela semble contre-intuitif et contraire à ce que je comprends de l'arrondi (et ne peut que faire trébucher les gens). L'anglais n'est pas ma langue maternelle, mais jusqu'à ce que je lise ceci, je pensais savoir ce que signifiait l'arrondi: - / Je suis sûr qu'au moment où la v3 a été introduite, il doit y avoir eu une discussion à ce sujet, mais je n'ai pas pu trouver une bonne raison dans ma recherche.
- Quelqu'un a-t-il une idée de pourquoi cela a été changé en cela?
- Y a-t-il d'autres langages de programmation traditionnels (par exemple, C, C ++, Java, Perl, ..) qui font ce genre d'arrondi (pour moi incohérent)?
Qu'est-ce que j'oublie ici?
MISE À JOUR: Le commentaire de @ Li-aungYip concernant "l'arrondi du banquier" m'a donné le bon terme de recherche / mots-clés à rechercher et j'ai trouvé cette question SO: Pourquoi .NET utilise-t-il l'arrondi du banquier par défaut? , donc je vais lire cela attentivement.