我正在尝试打印这样的INR格式货币:
NumberFormat fmt = NumberFormat.getCurrencyInstance();
fmt.setCurrency(Currency.getInstance("INR"));
fmt.format(30382.50);
显示Rs30,382.50
,但在印度显示为Rs. 30,382.50
(请参阅http://www.flipkart.com/)
如何在没有硬编码的情况下解决INR?
答案 0 :(得分:6)
这有点像黑客,但在非常类似的情况下,我使用了类似的东西
NumberFormat format = NumberFormat.getCurrencyInstance(new Locale("en", "in"));
String currencySymbol = format.format(0.00).replace("0.00", "");
System.out.println(format.format(30382.50).replace(currencySymbol, currencySymbol + " "));
我必须处理的所有货币都包含两个小数位,所以我可以为所有这些货币"0.00"
但是如果你打算使用像日元这样的东西,那就必须进行调整。有NumberFormat.getCurrency().getSymbol()
;但它会返回INR
代替Rs.
,因此无法用于获取货币符号。
答案 1 :(得分:4)
看看是否有效:
DecimalFormat fmt = (DecimalFormat) NumberFormat.getInstance();
fmt.setGroupingUsed(true);
fmt.setPositivePrefix("Rs. ");
fmt.setNegativePrefix("Rs. -");
fmt.setMinimumFractionDigits(2);
fmt.setMaximumFractionDigits(2);
fmt.format(30382.50);
编辑:修正了第一行。
答案 2 :(得分:2)
我没有看到任何简单的方法来做到这一点。这就是我想出来的......
获取实际货币符号的关键似乎是将目标语言环境传递给Currency.getSymbol:
currencyFormat.getCurrency().getSymbol(locale)
以下是一些似乎最常用的代码:
public static String formatPrice(String price, Locale locale, String currencyCode) {
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);
Currency currency = Currency.getInstance(currencyCode);
currencyFormat.setCurrency(currency);
try {
String formatted = currencyFormat.format(NumberFormat.getNumberInstance().parse(price));
String symbol = currencyFormat.getCurrency().getSymbol(locale);
// Different locales put the symbol on opposite sides of the amount
// http://en.wikipedia.org/wiki/Currency_sign
// If there is already a space (like the fr_FR locale formats things),
// then return this as is, otherwise insert a space on either side
// and trim the result
if (StringUtils.contains(formatted, " " + symbol) || StringUtils.contains(formatted, symbol + " ")) {
return formatted;
} else {
return StringUtils.replaceOnce(formatted, symbol, " " + symbol + " ").trim();
}
} catch (ParseException e) {
// ignore
}
return null;
}
答案 3 :(得分:1)
答案 4 :(得分:1)
更简单的方法,一种变通方法。 对于我的区域设置,货币符号为“R $”
public static String moneyFormatter(double d){
DecimalFormat fmt = (DecimalFormat) NumberFormat.getInstance();
Locale locale = Locale.getDefault();
String symbol = Currency.getInstance(locale).getSymbol(locale);
fmt.setGroupingUsed(true);
fmt.setPositivePrefix(symbol + " ");
fmt.setNegativePrefix("-" + symbol + " ");
fmt.setMinimumFractionDigits(2);
fmt.setMaximumFractionDigits(2);
return fmt.format(d);
}
输入:
moneyFormatter(225.0);
输出:
"R$ 225,00"