我有一个双人:5096,54 我需要将其格式化为:5.096,54(欧洲货币格式) 我正在尝试使用此代码而没有任何成功。
Locale l = Locale.getDefault(); // ("fr" in my case)
// Get the formatter for the specific locale
NumberFormat formatter = NumberFormat.getNumberInstance(l);
// Always 2 decimals
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
// Format
return formatter.format(d);
输出:5 096,54,当我期待5.096,54 知道它失败的原因吗?
答案 0 :(得分:1)
它使用西班牙语语言环境为我工作:
Double d = 5096.54;
Locale l = Locale.getDefault();
NumberFormat formatter = NumberFormat.getNumberInstance(l);
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String d1 = formatter.format(d);
结果:5.096,54
看起来法语区域设置使用看起来像千位分隔符的空格,你可以查看这个问题:
Java FRANCE/FRENCH Locale thousands separator looks like space but not actually
他们使用此解决方法修复它:
DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols();
char thousandSep = symbols.getGroupingSeparator();
input =input.replace(thousandSep, '.');
您可以使用相同的解决方法或使用西班牙语语言环境(或任何其他符合您需求的语言环境)
答案 1 :(得分:0)
您可以执行以下操作:
Locale l = Locale.getDefault();
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(l);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator('.'); // setting the thousand separator
// symbols.setDecimalSeparator(','); optionally setting the decimal separator
formatter.setDecimalFormatSymbols(symbols);
formatter.setMinimumFractionDigits(2);
formatter.setMaximumFractionDigits(2);
String formattedString = formatter.format(yourDouble);