在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使用的是法语区域设置。
注意:区域设置必须是法国(或法国)才能拥有良好的数字格式,而我实际上并不知道货币代码(例如,欧元,美元或英镑),它将是只是来自网络服务的字符串。
有没有办法告诉格式化程序我想要法语数字格式,但是它需要尊重符号的货币位置?
答案 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