Wenn Sie einige Zeit mit pythons round gearbeitet haben, denken Sie vielleicht, dass Sie wissen, wie Rundungen funktionieren – bis Sie auf dieses rätselhafte Verhalten stoßen:
print (round(6.5)) # output: 6
print (round(7.5)) # output: 8
Sie fragen sich vielleicht: Sollten nicht beide Zahlen aufgerundet werden? Oder sollten sie sich nicht zumindest genauso verhalten, entweder auf- oder abrunden?
Ist das ein Fehler?
Nein, es ist kein Fehler. Die Funktion von Pythons round()
verwendet eine Rundungsmethode namens „round half to even“, die auch als Banker-Rundung bekannt ist. Anstatt immer 0,5 nach oben (oder unten) zu runden, rundet Python auf die nächste gerade ganze Zahl, wenn eine Zahl genau in der Mitte zwischen zwei ganzen Zahlen liegt.
Schauen wir es uns genauer an:
round(6.5)
6.5
liegt auf halbem Weg zwischen und . Die nächste gerade ganze Zahl ist , das Ergebnis ist also 6.6
7
6
round(7.5)
7.5
liegt auf halbem Weg zwischen und . Die nächste gerade ganze Zahl ist , das Ergebnis ist also 8.7
8
8
Diese Rundungsmethode wird häufig in der Finanz- und Buchhaltungspraxis verwendet, um systematische Rundungsfehler zu vermeiden, die bei der Anwendung von traditionellen Rundungsverfahren auftreten können.
Wie funktioniert die Banker’s Rundung?
- Wenn eine Zahl genau in der Mitte zwischen zwei möglichen gerundeten Zahlen liegt (z. B. 2,5 oder 3,5), wird die Zahl auf die nächste gerade Zahl gerundet.
- Beispiel: 2,5 wird auf 2 gerundet (weil 2 die nächste gerade Zahl ist), und 3,5 wird auf 4 gerundet (weil 4 die nächste gerade Zahl ist).
Dies hilft, den sogenannten Rundungsfehler über viele Berechnungen hinweg auszugleichen, da die Zahl nicht immer nach oben gerundet wird, sondern die „gerade“ Zahl bevorzugt wird.
Warum verwendet pythons round die Rundung von Bankern?
Der Hauptgrund ist die Genauigkeit. In computergestützten Anwendungen können kumulative Rundungsfehler zu verzerrten Ergebnissen führen. Durch die Verwendung von „halb auf gerade runden“ stellt Python sicher, dass der Rundungsprozess bei einer Reihe von Berechnungen die Werte nicht ständig über- oder unterschätzt.
Die Herausforderung
Wie gehen Sie also mit dieser Situation um, wenn Pythons round() Ihnen nicht das Ergebnis liefert, das Sie erwarten? Wenn Sie ein anderes Rundungsverhalten benötigen, z. B. immer um 0,5 aufrunden, können Sie den Prozess mit anderen Werkzeugen in Python anpassen.
Python stellt Funktionen wie math.floor()
und math.ceil()
im Modul math bereit, mit denen Sie steuern können, wie Zahlen gerundet werden:
math.floor()
: Rundet eine Zahl auf die nächste ganze Zahl ab.math.ceil()
: Rundet eine Zahl auf die nächste ganze Zahl auf.
Fazit
Das Rundungsverhalten von Pythons round(6.5)
mag auf den ersten Blick seltsam erscheinen, aber es basiert auf soliden mathematischen Prinzipien. Wenn Sie das nächste Mal sehen, dass Sie 6 statt 7 geben, können Sie selbstbewusst erklären, warum – und sogar Ihre Python-Kollegen herausfordern, das Gleiche zu tun!
Weiterer Beitrag für Sie: PHP Microservices ohne Frameworks