Wissenschaftliches und kaufmännisches Runden

Grundsätzlich gibt es zwei Arten, um Zahlen zu runden: Wissenschaftliches und kaufmännisches Runden. Das kaufmännische Runden ist in DIN 1333 beschrieben. Es ist die Art zu runden, die bereits in der Schule gelehrt wird. Dabei wird „von der 0 weg“ gerundet. Das Verfahren hat jedoch Nachteile, weshalb in der Wissenschaft das wissenschaftliche Runden, auch mathematisches Runden genannt, angewendet wird.

Sinn und Zweck des Rundens

Beim Rechnen mit Nachkommastellen, können sich die Nachkommastellen im Laufe der Berechnungen vermehren. Nimm an, Du wolltest für eine Ware, die einen Nettopreis von 12,50 Euro hat, die 19%-ige Mehrwertsteuer ausrechnen. Du erhältst einen Betrag von 2,375 Euro für die Steuer. Was nun damit tun? Unsere Währung kennt keine halben Cent-Beträge. Da hilft nur Runden. Es wird daher auf zwei Nachkommastellen gerundet. In diesem Fall würde die kaufmännische Rundung zum Tragen kommen. Das ergibt dann einen Steuerbetrag von 2,38 Euro. – So wirst Du es in der Schule gelernt haben.

Nun können wir uns aber fragen, ob diese Art der Rundung ideal ist. Stell Dir vor, du hast eine Reihe von Messwerten vorliegen. Das Messgerät, beispielsweise eine elektronische Haushaltswaage, gibt die Messwerte in Gramm mit einer Nachkommastelle aus. Auf dem Gerät selbst, oder in dessen Bedienungsanleitung, steht jedoch, die Messgenauigkeit betrage lediglich ein Gramm. Die Berücksichtigung der Nachkommastellen stellt dann eine Scheingenauigkeit dar, weshalb solche Werte auf volle Gramm gerundet werden.

Die grundsätzliche Idee des Rundens ist es, die nächstliegende Zahl als gerundeten Wert zu nehmen. Insbesondere bei vielen Werten, verspricht diese Auswahl ein Ergebnis, welches möglichst nah am Original liegt. Es gibt jedoch ein Entscheidungsproblem mit der 5. Wissenschaftliches und kaufmännisches Runden verfolgen hierbei unterschiedliche Strategien.

Beispiel

Ausgangszahl     gerundet
-2.9                -3
-2.3                -2
 0.0                 0
 2.3                 3
 2.5                 ?   2 oder 3   ? 
 2.9                 3

Die obigen Rundungen wurden so gewählt, das der Abstand zwischen der originären Zahl und deren Rundung jeweils minimal ist. Bei 2,5 ist der Abstand zur 2 jedoch identisch mit dem zur 3. In welche Richtung soll gerundet werden? – In der Schule hast Du vermutlich gelernt, das bei 5 in Richtung der betragsmäßig größeren Zahl gerundet wird, also „von der 0 weg“. 2,5 würde demnach zu 3 und -2,5 zu -3 gerundet. Man nennt das kaufmännisches Runden.

Das kaufmännische Runden birgt die Gefahr statistischer Verzerrungen. Dazu wollen wir uns eine etwas längere Datenreihe ansehen und das kaufmännische Runden mit dem wissenschaftlichen Runden vergleichen. Hierbei ist die Regel, dass bei Werten, die genau in der Mitte liegen, immer so gerundet wird, dass die letzte nicht weggelassene Ziffer gerade ist. Die round()-Funktion von Python 3 arbeitet nach diesem Prinzip, was vielleicht auch schon zu Verwirrung bei Dir geführt hat, wenn Du diese Art der Rundung bisher nicht kanntest.

Ausgangszahl   kfm. Rundung     wiss. Rundung
    1.0             1                 1
    1.5             2                 2
    2.0             2                 2
    2.5             3                 2
    3.0             3                 3
    3.5             4                 4
    4.0             4                 4
    4.5             5                 4
    5.0             5                 5
    5.5             6                 6
    6.0             6                 6
    6.5             7                 6
    7.0             7                 7
    7.5             8                 8
    8.0             8                 8
    8.5             9                 8
    9.0             9                 9
    9.5            10                10
--------------------------------------------------------------------------
S: 94.5            99                95

Bei mehreren Messwerten liegt die Summe der wissenschaftlich gerundeten Werte deutlich näher an der Summe der originären Werte als bei den kaufmännisch gerundeten Werten.

Wissenschaftliches und kaufmännisches Runden

Das wissenschaftliche Runden besorgt in Python die round()-Funktion. Willst/Musst Du einmal kaufmännisch runden, so kannst Du Dir dafür eine eigene Funktion schreiben. Die Funktion kfm_runden(), die ich Dir hier vorstelle, macht genau das.

def kfm_runden(x:float, n:int=0) -> float:
    """
    Käufmännisches Runden.
    
    :param x: zu rundende Zahl 
    :param n: Anzahl der gewünschten Nachkommastellen
    :return: gerundeter Wert
    """
    vorzeichen = 1
    faktor = 10**n
    if x < 0:             # Vorzeichen merken
        vorzeichen = -1
    # um eine Stelle größer als später gewünscht skalieren
    skalierter_wert = int(abs(x) * faktor * 10)
    # letzte Ziffer extrahieren und abschneiden
    letzte_ziffer = skalierter_wert % 10
    skalierter_wert = skalierter_wert // 10
    # wenn die letzte Stelle >= 5 -> aufrunden, andernfalls keine Änderung
    if letzte_ziffer >= 5:
        skalierter_wert += 1
    # zurück in den ursprünglichen Wertebereich
    # - ohne Nachkommastellen wird in Integer zurückgegeben
    if n == 0:
        return int(skalierter_wert / faktor * vorzeichen)
    return skalierter_wert / faktor * vorzeichen

Ich habe die Funktion reichlich mit Kommentaren versehen, sodass Du erkennen und verstehen kannst, wie sie arbeitet. Das Kernstück ist das Skalieren. Dabei wird im ersten Schritt um eine 10er-Potenz mehr skaliert, um die letzte Ziffer abtrennen zu können. Ist diese größer als 5, so wird auf den skalierten Wert, der zu diesem Zeitpunkt bereits um die zusätzliche 10er-Potenz reduziert ist, 1 addiert. Danach wird einfach wieder durch den originären Skalierungsfaktor geteilt. Die Rundung ist damit abgeschlossen. Weil das eigentliche Runden ohne Vorzeichen geschieht, habe ich mir das Vorzeichen zu Beginn gemerkt und multipliziere das Resultat mit 1 oder -1, je nach Vorzeichen. Auf diese Weise wird kaufmännisch gerundet, von der Null weg.

Fazit

Als Programmiersprache für Technik und Wissenschaft, war die Entscheidung der Python-Entwickler, die round()-Funktion an der wissenschaftlichen Rundung zu orientieren sicherlich richtig. In Python 2 war ehedem die kaufmännische Rundung implementiert. Wer Python für die Schule oder eben auch in kaufmännischen Bereichen einsetzt, muss sich allerdings eine eigene Funktion für das Runden schreiben. Das ist jedoch, wie oben gezeigt, nicht schwierig.

Schreibe einen Kommentar