简体   繁体   中英

Currency code to currency symbol mapping

Good day, in database there is table with houses for sale records. For each house record there is currency code (in ISO 4217 format) field. Is it possibly to somehow get currency symbol from that code so I could use it on presentation side ?

Thank you.

PS Was trying to resolve that problem setting Currency object (created by Currency.getInstance(currencyCode)) into DecimalNumberFormat setCurrency method and then format value I needed to display, but formatted value still without currency symbol.

@artjomka

I was able to reproduce your problem by setting my default locale to Latvia

Locale.setDefault(new Locale("lv","LV"));
Currency c  = Currency.getInstance("EUR");
System.out.println(c.getSymbol());

This gave me the output of "EUR".

However, by leaving setting my locale to Uk (already my default) I get the symbol for the Euro(€).

Locale.setDefault(Locale.UK);
Currency c  = Currency.getInstance("EUR");
System.out.println(c.getSymbol());

You can use the Currency object's getSymbol method.

What symbol is used depends on the Locale which is used See this and this.

Update, Jan 2016: The links are now dead. But they were specific to Java 1.4/5 so not really relevant anymore. More details on currency formatting can be found in https://docs.oracle.com/javase/tutorial/i18n/format/numberFormat.html . The links can be found on the WayBackEngine though.

You can use Currency class and DecimalFormat class for achieve your requirement. In following example, # represents number and ¤ represents currency symbol, you can find relevant format parameters in java API doc for DecimalFormat class.

        Currency currency = Currency.getInstance("USD");

        DecimalFormat decimalFormat = new DecimalFormat("#¤");
        decimalFormat.setCurrency(currency);
        System.out.println(decimalFormat.format(234));

You should call Currency.getSymbol(Locale) rather than Currency.getSymbol() (without a locale object). Setting the default locale gives you the behavior that you want.

Never blindly append currency symbols (that assumes that append is the locale-appropriate position of the currency symbol). I18n-unsafe practice. Same with the "#¤" string (for locales with prefix currency symbol, this is incorrect)

There is a code-Snippet in https://stackoverflow.com/a/15343675/702345

But be careful:

  • One Currency can have multiple symbols. Eg: USD has also the Symbol "US$" for Local "es_US" (at least on Java8, Win7 on my VM)
  • Difference Currencies can have the same symbols, eg: USD, AUD

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM