如何将十进制格式的小数分隔符从逗号更改为点/点?

我有一个疯狂的小方法,可以将BigDecimal值转换为漂亮且可读的字符串。

private String formatBigDecimal(BigDecimal bd){
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(3);
    df.setMaximumFractionDigits(3);
    df.setMinimumIntegerDigits(1);
    df.setMaximumIntegerDigits(3);
    df.setGroupingSize(20);
    return df.format(bd);
}

但是,它还会产生一个所谓的分组分隔符,使我的所有值都如下所示:","

xxx,xxx

我确实需要分隔符是点或点,而不是逗号。有没有人知道如何完成这个小小的壮举?

我已经读过这个,特别是这个到死,但我找不到一种方法来完成这个。我是不是以错误的方式接近这个?有没有一种更优雅的方法来做到这一点?甚至可能是一个解释不同局部数字表示的解决方案,因为逗号在欧洲标准下是完美的。


答案 1

您可以通过设置区域设置或使用十进制格式符号来更改分隔符。

如果希望分组分隔符是一个点,则可以使用欧洲区域设置:

NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
DecimalFormat df = (DecimalFormat)nf;

或者,可以使用 DecimalFormatSymbols 类来更改由 format 方法生成的格式化数字中显示的符号。这些符号包括小数分隔符、分组分隔符、减号和百分号等:

DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale);
otherSymbols.setDecimalSeparator(',');
otherSymbols.setGroupingSeparator('.'); 
DecimalFormat df = new DecimalFormat(formatString, otherSymbols);

currentLocale可以从Locale.getDefault()获得,即:

Locale currentLocale = Locale.getDefault();

答案 2

欧洲相当巨大。我不确定他们是否到处使用相同的格式。但是,这个这个答案将有所帮助。

String text = "1,234567";
NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY);
double val = nf_in.parse(text).doubleValue();

NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK);
nf_out.setMaximumFractionDigits(3);
String output = nf_out.format(val);

即使用正确的区域设置。