一尘不染

Java如何将DecimalFormat的小数点分隔符从逗号更改为点/点?

java

我有一个疯狂的方法,可以将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

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

我已阅读本,尤其是这种死亡,但现在我无法找到一个方法来完成这件事。我是否以错误的方式处理?有更优雅的方法吗?甚至可能是一个解决方案,说明了不同的本地号码表示形式,因为按照欧洲标准,逗号将是完美的。


阅读 866

收藏
2020-03-06

共1个答案

一尘不染

你可以通过设置区域设置或使用DecimalFormatSymbols来更改分隔符。

如果希望分组分隔符成为一个点,则可以使用欧洲语言环境:

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);

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

Locale currentLocale = Locale.getDefault();
2020-03-06