货币代码到货币符号映射

时间:2010-10-08 08:47:49

标签: java currency

美好的一天, 在数据库中有一个表与房屋销售记录。对于每个房屋记录,都有货币代码(ISO 4217格式)字段。是否可能以某种方式从该代码中获取货币符号,以便我可以在演示方面使用它?

谢谢。

P.S。试图解决这个问题,将Currency对象(由Currency.getInstance(currencyCode)创建)设置为DecimalNumberFormat setCurrency方法,然后格式化我需要显示的值,但格式化的值仍然没有货币符号。

6 个答案:

答案 0 :(得分:13)

@artjomka

我可以通过将默认语言环境设置为拉脱维亚来重现您的问题

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

这给了我“EUR”的输出。

但是,通过将我的语言环境设置为Uk(已经是我的默认设置),我得到了欧元符号(€)。

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

答案 1 :(得分:9)

您可以使用Currency对象的getSymbol方法。

使用什么符号取决于使用的Locale 请参阅 thisthis.

更新,2016年1月: 链接现在已经死了。但它们特定于Java 1.4 / 5,因此不再具有相关性。有关货币格式的更多详细信息,请参阅https://docs.oracle.com/javase/tutorial/i18n/format/numberFormat.html。这些链接可以在WayBackEngine上找到。

答案 2 :(得分:3)

您可以使用Currency类和DecimalFormat类来满足您的要求。 在下面的示例中,#表示数字,¤表示货币符号,您可以在DecimalFormat类的java API文档中找到相关的格式参数。

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

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

答案 3 :(得分:1)

您应该调用Currency.getSymbol(Locale)而不是Currency.getSymbol()(没有区域设置对象)。设置默认语言环境可以为您提供所需的行为。

答案 4 :(得分:0)

绝不盲目附加货币符号(假设附加是货币符号的适合区域的位置)。 I18n-不安全的做法。与“#¤”字符串相同(对于带有前缀货币符号的区域设置,这是不正确的)

答案 5 :(得分:0)

https://stackoverflow.com/a/15343675/702345

中有一个代码段

但要小心:

  • 一个货币可以有多个符号。例如:美元也有符号" US $"对于本地" es_US" (至少在我的VM上的Java8,Win7上)
  • 差异货币可以使用相同的符号,例如:USD,AUD