Warum unterscheiden sich Positionen und Gesamtsumme einer Geschäfts-App um einen Cent?
Legen Sie die Rundungsregeln fest, bevor Sie eine App für Angebote, Bestellungen oder Abrechnungen abnehmen. Entscheidend ist nicht nur, ob der Bildschirm zwei Nachkommastellen zeigt. Sie müssen vereinbaren, welche Werte erhalten bleiben, wann gerundet wird und welche Berechnung den tatsächlich zu zahlenden Betrag bestimmt. Eine ordentlich formatierte Anzeige kann widersprüchliche Berechnungen verdecken.
Dieser Leitfaden hilft Ihnen, diese Anforderungen zu beschreiben. Er legt keine steuerlichen Berechnungen, gesetzlichen Rechnungsregeln, Wechselkurse oder Regeln zur Bargeldrundung fest. Lassen Sie solche Vorgaben vor der Umsetzung durch eine zuständige Fachperson bestätigen.
Zuerst den Unterschied nachvollziehen
Bitten Sie um ein durchgerechnetes Beispiel mit Eingaben, Zwischenergebnissen, gerundeten Positionsbeträgen und Gesamtsumme. Prüfen Sie auch, ob alle Beteiligten denselben Stand der Bestellung vergleichen. Eine geänderte Menge oder ein anderer Rabatt ist kein Rundungsfehler. Eine andere Rundungsmethode behebt diesen Unterschied nicht.
Wenn tatsächlich die Rundung verantwortlich ist, klären Sie das gewünschte Ergebnis: Muss der Zahlbetrag der Summe der angezeigten Positionen entsprechen, oder wird er aus genauer gespeicherten Werten berechnet? Keine dieser Antworten ist eine allgemeingültige Buchhaltungsregel. Ihre Dokumente und die einschlägigen Anforderungen bestimmen die passende Lösung. Die Anwendung darf diese Entscheidung nicht jeder Ansicht einzeln überlassen.
Ein Beispiel zeigt, wo die Entscheidung liegt
Ein hypothetischer Test enthält drei einzelne Positionen mit jeweils 0,335 vor der Rundung, alle in derselben Währung. Angenommen sind zwei Nachkommastellen und eine Regel, bei der ein exakter Mittelwert von null weg gerundet wird.
Wird jede Position zuerst gerundet, ergibt das jeweils 0,34 und zusammen 1,02. Werden zunächst die ungerundeten Werte addiert, entsteht 1,005; daraus wird nach derselben Regel 1,01. Die Rundungsmethode ist gleich, der Zeitpunkt ihrer Anwendung unterscheidet sich. Das Beispiel veranschaulicht Rechenwege, keine Vorschrift zur Steuerberechnung oder Rechnungserstellung.
Wenn die angezeigten Positionen laut Vereinbarung genau den Zahlbetrag ergeben sollen, lassen Sie sich diese Eigenschaft vorführen. Falls ein eigener Rundungsausgleich nötig ist, bestimmen Sie dessen Platz und verständliche Bezeichnung. Ändern Sie nicht unbemerkt einen Produktpreis, nur damit die Ansicht stimmig wirkt.
„Ganz normal runden“ reicht nicht
Die offizielle Python-Dokumentation zum Modul decimal beschreibt mehrere Verfahren. ROUND_HALF_UP rundet zum nächstgelegenen Wert und bei Gleichstand von null weg. ROUND_HALF_EVEN rundet ebenfalls zum nächstgelegenen Wert, bei Gleichstand jedoch zur geraden Endziffer. Das zweite Verfahren bedeutet also nicht, dass immer abgerundet wird.
Bei 1,005 ergeben sich auf zwei Nachkommastellen mit dem ersten Verfahren 1,01 und mit dem zweiten 1,00. Schreiben Sie das erwartete Ergebnis direkt zum Testwert, statt nur einen Verfahrensnamen zu nennen. Testen Sie auch negative Korrekturen und Rückabwicklungen: Bei negativen Beträgen ist das Wort „aufwärts“ leicht missverständlich.
Das sind belegte Softwareeigenschaften. Daraus folgt nicht, dass eines der Verfahren für Ihren Betrieb rechtlich vorgeschrieben oder geeignet ist.
Die Ausgangswerte müssen erklärbar bleiben
Fragen Sie, wie Geldbeträge und Rechengenauigkeit technisch abgebildet werden. Laut Python-Dokumentation lassen sich Dezimalzahlen wie 1,1 und 2,2 in dezimaler Arithmetik exakt darstellen, in binärer Gleitkommadarstellung dagegen nicht. Die Dokumentation erklärt außerdem: Wird ein vorhandener binärer Gleitkommawert in Decimal umgewandelt, bleibt dessen tatsächlicher Wert erhalten. Die ursprünglich gemeinte Dezimaleingabe wird dadurch nicht zurückgewonnen.
„Dezimalzahlen verwenden“ ist deshalb noch keine vollständige Anforderung. Halten Sie fest, wie eingegebene Preise in die Berechnung gelangen, welche Genauigkeit Zwischenschritte haben, wo gerundet und wie das Ergebnis gespeichert wird. Auch dezimale Arithmetik braucht klare Rundungsregeln.
Für angenommene Angebote oder abgeschlossene Bestellungen empfiehlt es sich, die damals verwendeten Eingaben und den Stand der Berechnungsregeln aufzubewahren. Eine spätere Softwarekorrektur sollte alte Kundenzusagen nicht stillschweigend neu berechnen. Vereinbaren Sie stattdessen einen ausdrücklichen Korrekturablauf. Das ist eine Empfehlung zur Nachvollziehbarkeit, keine Aussage über gesetzliche Speicherpflichten.
Ansichten und Schnittstellen zusammenführen
Bestimmen Sie für jeden bestätigten Vorgang ein maßgebliches Berechnungsergebnis. Bestellansicht, Export und erzeugtes Dokument sollten dieses Ergebnis verwenden, statt aus zufällig verfügbaren Werten jeweils eine neue Summe zu bilden.
Beschreiben Sie an jeder Schnittstelle Betrag, Währung und die vom Empfänger erwartete Einheit. Eine Zahl muss nicht in beiden Systemen dasselbe bedeuten. Legen Sie fest, was Mitarbeitende sehen und tun sollen, wenn eine empfangene Gesamtsumme von der eigenen Berechnung abweicht. Kommentarloses Überschreiben ist kein geregelter Abgleich.
Was bei der Abnahme gezeigt werden sollte
Halten Sie folgende Fälle als prüfbare Akzeptanzkriterien fest:
- Ein Preis mit zusätzlichen Nachkommastellen belegt den vereinbarten Rundungszeitpunkt.
- Ein exakter Mittelwert belegt das Rundungsverfahren.
- Negative Korrekturen und Rückabwicklungen folgen den ausdrücklich vereinbarten Regeln.
- Mengen- und Rabattänderungen berechnen nur den vorgesehenen Entwurf neu.
- Bestätigte Ansicht, Dokument und Export enthalten denselben Zahlbetrag.
- Neue Rechenregeln ändern angenommene historische Vorgänge nicht unbemerkt.
- Abweichungen an Schnittstellen sind erkennbar und haben eine zuständige Person für die Klärung.
Bringen Sie fachlich bestätigte Beispielrechnungen aus Ihrem Betrieb in die Planung einer Web-App mit. Einige eindeutig vereinbarte Ergebnisse helfen mehr als der Auftrag, „die Centdifferenz zu reparieren“.
Quelle und Grenzen
Python-Dokumentation zu decimal, Rundungsverfahren und Umwandlung von Gleitkommawerten: https://docs.python.org/3/library/decimal.html
Die technischen Aussagen stammen aus dieser Dokumentation. Empfehlungen zu Abläufen, gespeicherten Berechnungsgrundlagen und Abnahme dienen der Projektplanung und ersetzen keine steuerliche oder rechtliche Beratung.