背景
我有一个Android应用程序,我想根据ISO代码和当前区域设置将整数值格式化为货币字符串。我正在使用ICU库1.8.1。
例如,如果我的值为75且ISO代码为“USD”,我希望在美国语言环境中看到“$ 75”,但在法语区域设置上看到“USD75”。
问题
问题在于,即使我明确将语言环境设置为美国,我也总是看到“USD75”。我认为问题出在我的NumberFormat
货币实例中,但后来我试图简单地获取货币符号并注意到它是不正确的。出于某种原因,getSymbol()
方法始终返回货币代码。
public void test() {
Locale.setDefault(Locale.US);
String theISOCode = "USD"
Currency currency = Currency.getInstance(theISOCode);
currency.getCurrencyCode(); // "USD". This works as expected
currency.getSymbol(); // "USD". This looks weird.. Shouldn't it be "$"?
currency.getSymbol(Locale.US); // "USD". Same here, I expect it to be "$"
currency.getSymbol(ULocale.US); // still "USD"
}
我还查看了此链接:Java: Currency symbol based on ISO 4217 currency cod。看来我的应用程序有点不同。不确定它是否是库中的错误。
问题
如果您的区域设置为currency.getSymbol()
,Locale.FRANCE
返回“USD”是有道理的。但是,当我的语言环境为Locale.US
时,为什么会返回“USD”?如果我能在不切换库的情况下找到解决方案,那就太棒了。
答案 0 :(得分:0)
该问题原来是图书馆中的一个错误。更新版本后问题得到解决。感谢@Omid对此进行调查。