1

背景

我有一个 Android 应用程序,我想根据 ISO 代码和当前语言环境将整数值格式化为货币字符串。为此,我正在使用 ICU 库 1.8.1。

例如,如果我有一个值 75 并且 ISO 代码是“USD”,我希望在美国语言环境中看到“$75”,而在法语语言环境中看到“USD75”。

问题

问题是即使我将语言环境明确设置为美国,我也总是看到“75 美元”。我认为问题出在我的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()如果您的语言环境是,则返回“USD”对我来说是有意义的Locale.FRANCE。但是为什么当我的语言环境是时它会返回“USD” Locale.US?如果我能在不切换库的情况下找到解决方案,那就太好了。

4

1 回答 1

0

这个问题原来是库中的一个错误。更新版本后问题得到解决。感谢@Omid 对此进行调查。

于 2018-06-19T08:04:45.487 回答