2010-10-08 168 views
12

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

谢谢。

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

回答

7

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

用什么符号取决于语言环境所使用 见 thisthis.

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

+0

我试着为USD使用getSymbol,然后返回美元符号(正确),但如果我使用EUR或DKK作为货币代码,那么结果是EUR或DKK http:// ideone。com/ehmlP – artjomka 2010-10-08 09:27:33

+0

使用什么符号取决于所使用的语言环境。请参阅我的(更新)答案 – Nivas 2010-10-08 10:09:50

+0

中的文章据我了解,如果我想显示适当的货币符号,我需要保持区域设置格式的值我需要我正确(例如要正确显示英镑货币符号,我需要有英镑货币映射例如在Locale.UK)? – artjomka 2010-10-08 10:29:57

2

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

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

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

正如Nivas所说,您可以使用Currency类的getSymbol()方法直接获取相关符号,也可以将其单独附加到数字中。 – 2010-10-08 09:20:09

11

@artjomka

我可以通过我的默认区域设置拉脱维亚

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

复制您的问题这给了我“欧元”的输出。

但是,通过离开将我的区域设置为英国(已经是我的默认值),我得到了欧元的sympbol。

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

Nivas编辑他的答案,而我写我的。他的链接文章应该看到你的权利。 – 2010-10-08 10:16:17

1

你应该叫Currency.getSymbol(Locale)而非Currency.getSymbol()(没有Locale对象)。设置默认语言环境会为您提供所需的行为。

0

永远不要盲目追加货币符号(假定append是货币符号的区域适当位置)。 I18n-不安全的做法。同样以“#¤”字符串(前缀货币符号的语言环境,这是不正确的)

0

有一个代码片段在https://stackoverflow.com/a/15343675/702345

但要小心:

  • 一种货币可以有多个符号。如:美元也有符号 “US $” 本地 “es_US”(至少在Java8,Win7的在我的VM)
  • 差异货币可以有相同的符号,如:USD,AUD