Illustration einer tropischen Insel mit Palmen und einem hohen Berg

Java Blog für Programmierer

Geld und Währung in Java

· Christian Ullenboom

Geldbeträge repräsentieren

Für Geldbeträge gibt es in Java keinen eigenen Datentyp und so kann eine Speicherung je nach Programm immer anders aussehen. Es bieten sich an:

  • BigDecimal: Vorteil sind die präzisen Berechungen und die wählbaren Rundungen
  • Paar von int long: Getrenntes Speichern der Vor-/Nachkommastellen

Hinweis: Die primitiven Datentypen double und float sind wegen ihrer Unfähigkeit Vielfaches von 0.01 korrekt dazustellen nicht empfohlen; Rundungsfehler treten schnell auf.

Money and Currency API

Im „JSR 354: Money and Currency API“ wird ein eigener Datentyp für Geldbeträge definiert, und die Typen sollen eigentlich in Java 9 aufgenommen werden, doch dazu kam es nicht. Dennoch sind die Typen interessant und die Referenzimplementierung Moneta ein Blick wert: . Neben Geldbeträgen erlaubt die kleine Bibliothek auch Umrechungen, Formatierungen und eigene Währungen.

ISO 4217

Währungen werden durch Währungscodes beschrieben, und die Definition findet sich in der Norm ISO 4217. Einige ISO-Codes sind:

ISO 4217-CodeWährung/EinheitLandEUREuroLänder der europäischen WährungsunionCNYRenminbiChinaDKKKroneDänemarkGBPPfundVereinigtes KönigreichINRRupieIndienUSDDollarUSA, Ecuador, …XAUFeinunze Gold

Einige ISO 4217-Codes

Die Tabelle lässt am letzten Eintrag erkennen, dass es auch ISO-Codes für Edelmetalle und sogar Fonds gibt. Für jedes Kürzel gibt es ebenfalls einen numerischen Code.

Währungen in Java repräsentieren

Java repräsentiert Währungen durch die Klasse java.util.Currency. Exemplare der Klasse werden durch eine Fabrikmethode getInstance(String currencyCode) erfragt, bzw. aus einer Aufzählung ausgewählt.

Beispiel: Gib alle im System angemeldeten Währungen mit ein paar Informationen aus:

Currency.getAvailableCurrencies().stream()

        .sorted( Comparator.comparing( Currency::getCurrencyCode ) )

        .forEach( c -> System.out.printf( "%s, %s, %s, %s%n",

                                          c.getCurrencyCode(), c.getSymbol(),

                                          c.getDisplayName(), c.getNumericCode() ) );

Die Ausgabe beginnt so:

ADP, ADP, Andorranische Pesete, 20

AED, AED, VAE-Dirham, 784

AFA, AFA, Afghanische Afghani (1927–2002), 4

AFN, AFN, Afghanischer Afghani, 971

ALL, ALL, Albanischer Lek, 8

…

Kategorien: Allgemein, Insel

← Alle Beiträge