web-dev-qa-db-ja.com

NumberFormatの小数点記号

ロケールJava.text.NumberFormatを指定すると:

NumberFormat numberFormat = NumberFormat.getInstance();

その数値形式で小数点記号(カンマまたはポイントの場合)として使用される文字を取得するにはどうすればよいですか?新しいDecimalFormat(format)を使用せずにこのプロパティを変更するにはどうすればよいですか?

ありがとう

42
Javi

ヘルパークラス DecimalFomatSymbols は、あなたが探しているものです:

DecimalFormat format=DecimalFormat.getInstance();
DecimalFormatSymbols symbols=format.getDecimalFormatSymbols();
char sep=symbols.getDecimalSeparator();

必要に応じてシンボルを設定するには:

//create a new instance
DecimalFormatSymbols custom=new DecimalFormatSymbols();
custom.setDecimalSeparator(',');
format.setDecimalFormatSymbols(custom);

EDIT:この回答は、DecimalFormatに対してのみ有効であり、質問で必要なNumberFormatに対しては無効です。とにかく、それが著者を助けるかもしれないので、私はここでそれをさせます。

75
Tomas Narros

biziclopおよびJoachim Sauerに同意します。これは、小数記号とグループ化セパレーターをいじってこの作業を手動で行うと、多くの問題が発生する可能性があることです。 NumberFormat getInstanceメソッドでlocaleパラメーターを使用すると、すべての作業が自動的に行われます。必要に応じて、千のグループ化区切りを簡単に無効にできます。

次のjunitテストメソッド(合格)は、英語とドイツ語のロケールに基づいてこの動作を示しています。

public void testFormatter() {
    DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.UK);
    assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true

    formatter = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMAN);
    assertEquals(',', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true

    //and in case you want another decimal seperator for a specific locale
    DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols();
    decimalFormatSymbols.setDecimalSeparator('.');

    formatter.setDecimalFormatSymbols(decimalFormatSymbols);
    assertEquals('.', formatter.getDecimalFormatSymbols().getDecimalSeparator()); //true
}
5
Maria Ioannidou

Ifあなたの NumberFormat インスタンスは DecimalFormat 、次に、 getDecimalFormatSymbols() を使用してその情報を取得できます。

一般的に、その情報にアクセスすることはできません。

なぜあなたはそれが必要なのですか?

2
Joachim Sauer