1. ホーム

[解決済み】DecimalFormatの小数点以下の区切り文字をカンマからドット/ポイントに変更するには?

2022-04-29 05:30:12

質問

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

セパレータはカンマではなく、ドットまたはポイントである必要があります。 どなたかこの小さな偉業を達成するための手がかりをお持ちの方はいらっしゃいませんか?

私が読んだのは これ で、特に これ を今更ながら死守したいのですが、方法が見つかりません。 私のやり方は間違っているのでしょうか?もっとエレガントな方法はないのでしょうか?コンマはヨーロッパの標準では完璧なので、異なる地域の番号表現を考慮した解決策もあるかもしれません。

どのように解決するのか?

セパレータを変更するには、ロケールを設定するか、または DecimalFormatSymbols .

グループ分けの区切り文字をポイントにしたい場合は、european ロケールを使用することができます。

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() から取得することができます。

Locale currentLocale = Locale.getDefault();