Unrund - Runden in Tabellenkalkulationen und Python

Mo, 19. Oktober 2020, Ralf Hersel

Neulich durfte ich zum Vergleich von Telefoniekosten die Gesprächskosten des laufenden Jahres bearbeiten. Dabei ging es um knapp 100'000 Datensätze von Telefongesprächen, deren Kosten berechnet und die Summen gebildet werden sollten. Ein Kollege hatte bereits eine Vorarbeit in Excel für 10'000 Datensätze gemacht. Da mir das Hantieren in Excel mit solchen Datenmengen zu mühsam war, habe ich schnell ein Python-Skript geschrieben, um die Daten aus mehreren CSV-Dateien zusammenzuklauben und die Berechnungen durchzuführen.

Dabei ist mir ein grundlegender Unterschied bei den Rundungsfunktionen in Excel (auch in Libreoffice Calc) und in Python aufgefallen. Das Runden in den Tabellenkalkulationen verwendet das kaufmännische Runden, während bei Python symmetrisches Runden zum Einsatz kommt. Die Verfahren führen insbesondere dann zu verschiedenen Ergebnissen (Fehlern), wenn viele gerundete Werte summiert werden. Beim kaufmännischen Runden (das ist das, was man in der Schule lernt) wird eine 0.5 immer aufgerundet, obwohl sich dieser Wert in der Mitte zwischen 0 und 1 befindet. Das symmetrische Runden stellt es etwas schlauer an, da hierbei eine 0.5 nicht einfach aufgerundet wird, sondern zur nächsten geraden Zahl hin, entweder auf- oder abgerundet wird. Dies führt zu einem faireren Rundungsverhalten.

Beispiel für kaufmännisches Runden (Excel, Calc) Beispiel für symmetrisches Runden (Python)
0.5 gerundet = 1
1.5 gerundet = 2
2.5 gerundet = 3
3.5 gerundet = 4
4.5 gerundet = 5
5.5 gerundet = 6
6.5 gerundet = 7
7.5 gerundet = 8
8.5 gerundet = 9
Summe = 45
0.5 gerundet = 0
1.5 gerundet = 2
2.5 gerundet = 2
3.5 gerundet = 4
4.5 gerundet = 4
5.5 gerundet = 6
6.5 gerundet = 6
7.5 gerundet = 8
8.5 gerundet = 8
Summe = 40

Die korrekte Summe der nicht gerundeten Werte beträgt 40.5 und liegt somit viel näher am Ergebnis der symmetrisch gerundeten Werte. Summiert man sehr viele gerundete Werte, lohnt es sich auf das Rundungsverfahren zu achten, da man ansonsten grosse Abweichungen vom korrekten Ergebnis erhält. Dummerweise gibt es in Excel und Libreoffice-Calc keine Funktion für symmetrisches Runden.