【发布时间】:2016-03-01 15:30:09
【问题描述】:
我在 Java 8 中发现了一种奇怪的情况。我要将数字格式化为特定的语言环境,但其中一些无法正常工作。
long tenMillion = 10000000L; // this is ten million
Locale[] locales = Locale.getAvailableLocales();
//Locale[] locales = NumberFormat.getAvailableLocales(); // the same situation
for (Locale locale : locales) {
String currency = "Ten million in " + locale.getDisplayName() + " is " +
NumberFormat.getCurrencyInstance(locale).format(tenMillion);
if (locale.getDisplayName().equals("Ukrainian")){
System.out.println(currency);
System.out.println(Currency.getInstance("UAH").getSymbol(locale));
}
}
输出
Ten million in Ukrainian is ¤ 10 000 000,00
UAH
但是当我创建这个 locate 的实例时,我得到了正确的结果:
Locale uaLoc = new Locale("uk", "UA");
String currency = "Ten million in " + uaLoc.getDisplayName() + " is " +
NumberFormat.getCurrencyInstance(uaLoc).format(tenMillion);
System.out.println(currency);
System.out.println(Currency.getInstance("UAH").getSymbol(uaLoc));
输出
Ten million in Ukrainian (Ukraine) is 10 000 000 грн.
грн.
这不仅适用于乌克兰语地区,也适用于其他地区:
Ten million in Bulgarian is ¤ 10 000 000,00
Ten million in Italian is ¤ 10.000.000,00
Ten million in Korean is ¤ 10,000,000.00
Ten million in Latvian is ¤ 10 000 000,00
etc.
但国家/地区的语言环境格式正确:
Ten million in Bulgarian (Bulgaria) is лв.10 000 000
Ten million in Italian (Italy) is € 10.000.000,00
Ten million in Italian (Switzerland) is SFr. 10'000'000.00
Ten million in Korean (South Korea) is ₩10,000,000
Ten million in Latvian (Latvia) is 10 000 000 €
看起来货币只与国家有关。而且是非常正确的方式!
有谁知道如何为 Java 9 请求 API 更改? 如果能关注 API 那就太好了
Locale.getAvailableCountryLocales();
为了避免任何误解。
谢谢
【问题讨论】:
-
好吧,如果你只输入语言,没有关于国家的具体信息,对吧?例如,如果您选择英语作为语言,货币显示将根据国家/地区是美国还是英国而有所不同......虽然我不确定,但我的猜测是只有当除了语言之外,还指定了国家/地区是能够显示正确货币表示的语言环境实现。例如,法语也是如此,具体取决于国家是法国还是加拿大。
-
我想知道你的第一个代码 sn-p 中的
uaLoc是什么... -
@Tom 感谢您的评论。那是“语言环境”。已编辑
-
@zapl 谢谢,这对我来说是新信息
标签: java locale currency symbols