美好的一天, 在数据库中有一个表与房屋销售记录。对于每个房屋记录,都有货币代码(ISO 4217格式)字段。是否可能以某种方式从该代码中获取货币符号,以便我可以在演示方面使用它?
谢谢。
P.S。试图解决这个问题,将Currency对象(由Currency.getInstance(currencyCode)创建)设置为DecimalNumberFormat setCurrency方法,然后格式化我需要显示的值,但格式化的值仍然没有货币符号。
答案 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 请参阅 this和this.
更新,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
中有一个代码段但要小心: