Bei der Erfassung von Finanzdaten gibt es viele Rundungsprobleme. Das erste Problem ist die Fähigkeit, exakte Dezimalzahlen zu speichern und abzurufen
- die meisten Datenbanken bieten den Datentyp "Dezimal" an, bei dem Sie die Anzahl der Stellen vor und nach dem Komma angeben können (auch Währungen haben unterschiedliche Dezimalstellen, ich hatte schon mit Währungen mit 0, 2 und 3 Dezimalstellen zu tun)
- wenn Sie mit diesen Daten arbeiten und unerwartete Rundungsfehler auf der Anwendungsseite vermeiden wollen, können Sie BCD als allgemeiner Ansatz, oder Sie können ganze Zahlen verwenden, um eine beliebige feste Dezimalschreibweise darzustellen, oder Ihre eigene mischen
Wenn dieser erste Punkt geklärt ist, kann keine Addition (oder Subtraktion) Rundungsfehler verursachen. Dasselbe gilt für die Multiplikation mit einer ganzen Zahl.
Das zweite Problem, nachdem Sie in der Lage sind, Daten ohne Informationsverlust zu speichern und abzurufen, sind erwartete Rundungsfehler aufgrund von Divisionen (oder Multiplikationen mit nicht ganzzahligen Werten).
Wenn Ihr Währungsformat z.B. 2 Dezimalstellen zulässt und Sie eine Transaktion speichern möchten, die einen Saldo von 10 in 3 gleiche Teile aufschlüsselt, können Sie dies nur wie folgt speichern
10.00
-3.33
-3.33
-3.33
et
-0.01
(Rundungsfehler)
Dies ist ein zu erwartendes Problem, das unabhängig von der Wahl des Datentyps der Speicherung auftritt und das behoben werden muss, wenn Sie möchten, dass Ihre Konten ausgeglichen sind. Diese Situation wird hauptsächlich durch Divisionen (oder Multiplikationen mit nicht ganzzahligen Zahlen, die viele signifikante Stellen haben) verursacht.
Eine Möglichkeit, damit umzugehen, besteht darin, zu überprüfen, ob Ihre Daten nach solchen Operationen ausgeglichen sind und die zulässige Rundungsdifferenz im Gegensatz zu einer Fehlersituation zu erkennen.
EDIT: Was die Verweise auf die Literatur betrifft, diese scheint interessant und nicht zu lang zu sein und betrifft ein recht breites Publikum mit interessanten Szenarien.