3

我有一个 Double: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 知道为什么会失败吗?

4

2 回答 2

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 语言环境千位分隔符看起来像空格,但实际上不是

他们用这个解决方法修复它:

DecimalFormat df = (DecimalFormat) NumberFormat.getNumberInstance(Locale.FRANCE);
DecimalFormatSymbols symbols = df.getDecimalFormatSymbols();
char thousandSep = symbols.getGroupingSeparator();

input =input.replace(thousandSep, '.'); 

您可以使用相同的解决方法或使用西班牙语区域设置(或任何其他符合您需要的)

于 2016-06-10T10:16:21.233 回答
1

您可以执行以下操作:

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);
于 2016-06-10T10:18:04.003 回答