与Locale不同的货币的货币格式

时间:2016-09-12 15:07:37

标签: java android

在Android上,我尝试使用特定数字格式格式化某种货币。

我的号码必须使用法语格式(9 876 543,21)格式化,但货币的符号应根据货币放置:

  • 9 876 543,21 € for EUR
  • $9 876 543,21 for USD

这是我的代码(这使用java.util类,但结果与android.icu包相同):

final Double of = Double.valueOf("9876543.21");
final Currency usd = Currency.getInstance("USD");
final NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(Locale.FRANCE);
currencyInstance.setCurrency(usd);
Log.d("test", currencyInstance.format(amount));

输出为9 876 543,21 $US,因为我的NumberFormat使用的是法语区域设置。

注意:区域设置必须是法国(或法国)才能拥有良好的数字格式,而我实际上并不知道货币代码(例如,欧元,美元或英镑),它将是只是来自网络服务的字符串。

有没有办法告诉格式化程序我想要法语数字格式,但是它需要尊重符号的货币位置?

1 个答案:

答案 0 :(得分:1)

这完美无缺,我认为是你要实现的目标

    final Double of = Double.valueOf("9876543.21");

    NumberFormat currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("EUR"));
    Log.d("test", currencyInstance.format(of));
    currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("GBP"));
    Log.d("test", currencyInstance.format(of));
    currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("SEK"));
    Log.d("test", currencyInstance.format(of));
    currencyInstance = NumberFormat.getCurrencyInstance(getLocalFromISO("USD"));
    Log.d("test", currencyInstance.format(of));

private Locale getLocalFromISO(String iso4217code){
    Locale toReturn = null;
    for (Locale locale : NumberFormat.getAvailableLocales()) {
        String code = NumberFormat.getCurrencyInstance(locale).
                getCurrency().getCurrencyCode();
        if (iso4217code.equals(code)) {
            toReturn = locale;
            break;
        }
    }
    return toReturn;
}
//Prints  
//9.876.543,21 €
//£9,876,543.21
// 9 876 543,21 kr
//US$9,876,543.21