Ich habe gerade neu gelesen, was in Python 3.0 neu ist und es heißt:
Die Rundungsstrategie der Funktion round () und der Rückgabetyp haben sich geändert. Genaue Fälle auf halber Strecke werden jetzt auf das nächste gerade Ergebnis gerundet, anstatt von Null weg. (Zum Beispiel gibt Runde (2.5) jetzt 2 statt 3 zurück.)
und die Dokumentation für Runde :
Für die eingebauten Typen, die round () unterstützen, werden die Werte auf das nächste Vielfache von 10 zur Potenz minus n gerundet. Wenn zwei Vielfache gleich nahe beieinander liegen, wird auf die gerade Wahl gerundet
Also unter v2.7.3 :
In [85]: round(2.5)
Out[85]: 3.0
In [86]: round(3.5)
Out[86]: 4.0
wie ich erwartet hätte. Jetzt jedoch unter v3.2.3 :
In [32]: round(2.5)
Out[32]: 2
In [33]: round(3.5)
Out[33]: 4
Dies scheint nicht intuitiv zu sein und widerspricht dem, was ich über Rundungen verstehe (und zwangsläufig Menschen stolpern lässt). Englisch ist nicht meine Muttersprache, aber bis ich dies las, dachte ich, ich wüsste, was Rundung bedeutet: - / Ich bin mir sicher, dass es zum Zeitpunkt der Einführung von v3 einige Diskussionen darüber gegeben haben muss, aber ich konnte keinen guten Grund dafür finden meine Suche.
- Hat jemand einen Einblick, warum dies geändert wurde?
- Gibt es andere gängige Programmiersprachen (z. B. C, C ++, Java, Perl usw.), die diese Art von (für mich inkonsistenter) Rundung durchführen?
Was fehlt mir hier?
UPDATE: @ Li-aungYips Kommentar zu "Banker-Rundung" gab mir den richtigen Suchbegriff / die richtigen Suchbegriffe und ich fand diese SO-Frage: Warum verwendet .NET die Banker-Rundung als Standard? , also werde ich das sorgfältig lesen.