SequelizeJS + Postgres: Bester Datentyp für Währungen

Mit Währungen rechnen kann schnell in ein Desaster münden, wenn sich in der eigenen Applikation Rundungsfehler einschleichen. Deswegen sollte man schon frühzeitig eine robuste Datenstruktur verwenden, damit auch nichts beim Rechnen schief geht! Außerdem ist es wichtig, komfortabel und intuitiv mit den Daten arbeiten zu können.

Es gibt mehrere Varianten

  1. Float & Double
  2. Dezimal
  3. Integer (Speichern als Centbeträge)

Float & Double: Diesen Datentyp sollte man auf keinen Fall verwenden. Rechnen mit diesen Zahlen als Währungsgrundlage kann fatale Folgen haben. So ist das Rechnen mit Floats nicht zwingend Assoziativ / Distributiv, was man von Festkommazahlen eigentlich erwarten kann. Von diesen Fließkommazahlen aufgrund ihrer Beschaffenheit und Herkunft aus dem Binärsystem aber nicht. Zuweilen kann es sogar vorkommen, dass eine einfache Dezimalzahl (0,3) – insofern Ihr gekürzter Nenner keine Zweierpotenz ist – nicht exakt als Gleitkommazahl dargestellt werden kann.

Dezimal verhält sich da schon besser. Am besten ist es, wenn man die Darstellung und Speicherung konsistent auf zwei Nachkommastellen fixiert. Sollten bei einer Verrechnung Perioden entstehen und diese tiefer gespeichert werden als das in der Darstellung angezeigt wird, können sich Rundungen und Folgeeffekte bis hin in Buchhalterische Rechnungen durchziehen.

Integer ist nicht nur performancetechnisch klar im Vorteil. Mit der richtigen Abstraktion kann man auch sehr leicht damit umgehen. Darüber hinaus kann die Speicherung als Integer genug Flexibilität liefern, um sog. Tausenderwährungen darzustellen. Hierzu zählt z.B. der Kuwait-Dinar.

In Postgres gibt es noch den Datentyp Money. Der wird leider nicht von Sequelize unterstützt und ist deswegen aus der Betrachtung ausgeschlossen. Money war auch in einer früheren Version als Deprecated markiert. Später hat dieser Datentyp aber wieder den Weg zurück gefunden.

2 Gedanken zu „SequelizeJS + Postgres: Bester Datentyp für Währungen

  • 10. November 2016 um 12:43 Uhr
    Permalink

    Hi Tomas,

    eine Fixierung auf 2 Nachkommastellen ist nur bedingt gut. Vor allem wenn man Richtung Internationalisierung in den Nahen Osten denkt. Kuwait-Dinar teilt sich zum Beispiel auf 1000 Fils auf und macht diese Währung zur sogenannten 1000er Währung. Ähnlich verhält es sich auch mit der Tunesischen Währung.

    Klar kommt es immer auf das Projekt an aber Integer wäre meiner Meinung nach die bessere Wahl.

    Gruß

    Antworten
  • 13. November 2016 um 2:34 Uhr
    Permalink

    Hi Sebastian,

    danke Dir vielmals. Deine Anmerkung habe ich natürlich eingearbeitet. Ich revanchiere mich auf dem Weihnachtsmarkt 🙂

    Grüße

    Antworten

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .