{"id":3712,"date":"2017-02-24T19:26:47","date_gmt":"2017-02-24T17:26:47","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3712"},"modified":"2017-02-24T19:26:47","modified_gmt":"2017-02-24T17:26:47","slug":"geld-und-waehrung-in-java","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/02\/geld-und-waehrung-in-java\/","title":{"rendered":"Geld und W\u00e4hrung in Java"},"content":{"rendered":"<h3>Geldbetr\u00e4ge repr\u00e4sentieren<\/h3>\n<p>F\u00fcr Geldbetr\u00e4ge gibt es in Java keinen eigenen Datentyp und so kann eine Speicherung je nach Programm immer anders aussehen. Es bieten sich an:<\/p>\n<ul>\n<li>BigDecimal: Vorteil sind die pr\u00e4zisen Berechungen und die w\u00e4hlbaren Rundungen<\/li>\n<li>Paar von int long: Getrenntes Speichern der Vor-\/Nachkommastellen<\/li>\n<\/ul>\n<p>Hinweis:\u00a0Die primitiven Datentypen double und float sind wegen ihrer Unf\u00e4higkeit Vielfaches von 0.01 korrekt dazustellen nicht empfohlen; Rundungsfehler treten schnell auf.<\/p>\n<h4>Money and Currency API<\/h4>\n<p>Im \u201eJSR 354: Money and Currency API\u201c wird ein eigener Datentyp f\u00fcr Geldbetr\u00e4ge 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\u00a0ein Blick wert: <a href=\"http:\/\/javamoney.github.io\/ri.html\">http:\/\/javamoney.github.io\/ri.html<\/a>. Neben Geldbetr\u00e4gen erlaubt die kleine Bibliothek auch Umrechungen, Formatierungen und eigene W\u00e4hrungen.<\/p>\n<h3>ISO 4217<\/h3>\n<p>W\u00e4hrungen werden durch W\u00e4hrungscodes beschrieben, und die Definition findet sich in der Norm ISO 4217. Einige ISO-Codes sind:<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"201\">ISO 4217-Code<\/td>\n<td width=\"188\">W\u00e4hrung\/Einheit<\/td>\n<td width=\"211\">Land<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">EUR<\/td>\n<td width=\"188\">Euro<\/td>\n<td width=\"211\">L\u00e4nder der europ\u00e4ischen W\u00e4hrungsunion<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">CNY<\/td>\n<td width=\"188\">Renminbi<\/td>\n<td width=\"211\">China<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">DKK<\/td>\n<td width=\"188\">Krone<\/td>\n<td width=\"211\">D\u00e4nemark<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">GBP<\/td>\n<td width=\"188\">Pfund<\/td>\n<td width=\"211\">Vereinigtes K\u00f6nigreich<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">INR<\/td>\n<td width=\"188\">Rupie<\/td>\n<td width=\"211\">Indien<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">USD<\/td>\n<td width=\"188\">Dollar<\/td>\n<td width=\"211\">USA, Ecuador, \u2026<\/td>\n<\/tr>\n<tr>\n<td width=\"201\">XAU<\/td>\n<td width=\"188\">Feinunze Gold<\/td>\n<td width=\"211\">&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Einige ISO 4217-Codes<\/p>\n<p>Die Tabelle l\u00e4sst am letzten Eintrag erkennen, dass es auch ISO-Codes f\u00fcr Edelmetalle und sogar Fonds gibt. F\u00fcr jedes K\u00fcrzel gibt es ebenfalls einen numerischen Code.<\/p>\n<h3>W\u00e4hrungen in Java repr\u00e4sentieren<\/h3>\n<p>Java repr\u00e4sentiert W\u00e4hrungen durch die Klasse java.util.Currency. Exemplare der Klasse werden durch eine Fabrikmethode getInstance(String currencyCode) erfragt, bzw. aus einer Aufz\u00e4hlung ausgew\u00e4hlt.<\/p>\n<p>Beispiel:\u00a0Gib alle im System angemeldeten W\u00e4hrungen mit ein paar Informationen aus:<\/p>\n<pre><strong>Currency.getAvailableCurrencies()<\/strong>.stream()\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .sorted( Comparator.comparing( Currency::getCurrencyCode ) )\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .forEach( c -&gt; System.out.printf( \"%s, %s, %s, %s%n\",\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>c.getCurrencyCode()<\/strong>, <strong>c.getSymbol()<\/strong>,\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <strong>c.getDisplayName()<\/strong>, <strong>c.getNumericCode()<\/strong> ) );<\/pre>\n<p>Die Ausgabe beginnt so:<\/p>\n<p>ADP, ADP, Andorranische Pesete, 20<\/p>\n<p>AED, AED, VAE-Dirham, 784<\/p>\n<p>AFA, AFA, Afghanische Afghani (1927\u20132002), 4<\/p>\n<p>AFN, AFN, Afghanischer Afghani, 971<\/p>\n<p>ALL, ALL, Albanischer Lek, 8<\/p>\n<p>\u2026<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Geldbetr\u00e4ge repr\u00e4sentieren F\u00fcr Geldbetr\u00e4ge 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\u00e4zisen Berechungen und die w\u00e4hlbaren Rundungen Paar von int long: Getrenntes Speichern der Vor-\/Nachkommastellen Hinweis:\u00a0Die primitiven Datentypen double und float sind wegen ihrer Unf\u00e4higkeit Vielfaches [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1,11],"tags":[],"class_list":["post-3712","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-insel"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3712","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3712"}],"version-history":[{"count":3,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3712\/revisions"}],"predecessor-version":[{"id":3715,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3712\/revisions\/3715"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3712"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3712"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3712"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}