web-dev-qa-db-ja.com

DecimalFormatを使用してお金をフォーマットする方法は?

入力は8.7000000のようになり、8.70 EURのようにフォーマットしたいと思います。 DecimalFormatクラスの使用を検討しました。

Double number = Double.valueOf(text);

DecimalFormat dec = new DecimalFormat("#.## EUR");
String credits = dec.format(number);

TextView tt = (TextView) findViewById(R.id.creditsView);
tt.setText(credits);

結果は8.7 EURです。フォーマッタに.の後に2桁の数字を付けるように指示するにはどうすればよいですか?

13
Upvote

また、整数を使用してすべての通貨を格納することについてのJonSkeetのポイントをここで強調したいと思います-お金で浮動小数点の丸め誤差を処理したくありません。

使用する .00 の代わりに .## --0は数字を意味し、#は数字を意味します(ただし、ゼロに等しい場合は非表示にします)。

Double number = Double.valueOf(text);

DecimalFormat dec = new DecimalFormat("#.00 EUR");
String credits = dec.format(number);

TextView tt = (TextView) findViewById(R.id.creditsView);
tt.setText(credits);

または、setMinimumFractionDigitsを使用します。

Double number = Double.valueOf(text);

DecimalFormat dec = new DecimalFormat("#.## EUR");
dec.setMinimumFractionDigits(2);
String credits = dec.format(number);

TextView tt = (TextView) findViewById(R.id.creditsView);
tt.setText(credits);
28
Matt Fellows

私は以下のこのリンクで素晴らしい解決策を見つけました

http://docs.Oracle.com/javase/tutorial/i18n/format/decimalFormat.html

要するに、92323345465.30のような通貨を92,323,345,465.30として表すには、###、###、###、###。00を使用します。

つまり、「0」を使用すると、「0」は別の数字に置き換えられるか、置き換える数字がない場合は表示されます。ただし、「#」を使用している場合、「#」を置き換える番号がない場合、そのスペースは空になります。

書式設定の前、または書式設定文字列の後に、$などの独自の記号を追加することもできます。

5
Jesse

私は良い選択肢はこのアプローチだと思います:

#,###.00を使用すると、値0.50の結果は次のように表示されます。

$、50

ただし、#,##0.00を使用すると、同じ値の結果は次のようになります。

$ 0,50

2
Cícero Moura