EMZETT.
Login

Geldbeträge in Programmen richtig speichern

Kurz: Geld speichert man nie als Fließkommazahl (float/double), sondern als ganze Zahl in der kleinsten Einheit (Cent) oder als exakten Dezimaltyp.

Genauer: Binäre Fließkommazahlen können viele Dezimalbrüche nicht genau darstellen. 0.1 + 0.2 ergibt in den meisten Sprachen 0.30000000000000004. Bei Beträgen summieren sich solche Abweichungen.

Im Detail

  • Ganze Cent: 19,99 € werden als 1999 gespeichert. Addition und Vergleich sind exakt. Nur bei Anzeige durch 100 teilen.
  • Dezimaltypen: DECIMAL(12,2) in SQL, BigDecimal (Java), Decimal (Python, C#). Sie rechnen im Zehnersystem.
  • Währung mitführen: Betrag und Währungscode (EUR, JPY …) gehören zusammen. Nicht alle Währungen haben zwei Nachkommastellen (JPY: 0, KWD: 3).
  • Runden: Die Rundungsregel ist fachlich festzulegen (kaufmännisch, Banker’s Rounding) und nur am Ende von Rechenketten anzuwenden. Prozente und Steuern führen zu Bruchteilen von Cent.
  • Verteilen: Beim Aufteilen (100 € auf 3) bleibt ein Rest-Cent, der bewusst zugewiesen werden muss.
  • Austausch: In JSON Beträge als Zeichenkette oder ganze Cent übertragen, nicht als Zahl mit Nachkommastellen.

Siehe auch: Gleitkommazahl