货币代码到货币符号映射

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

谢谢。

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

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

使用什么符号取决于使用的Locale请参阅此和此。

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

@artjomka

通过将我的默认语言环境设置为拉脱维亚,我能够重现您的问题

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

这给了我“欧元”的输出。

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

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

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

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

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

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

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

不过要小心:

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