2011-12-21 8 views
11

入力は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です: 私はDecimalFormatクラスを使用して検討しました。 ,の後にフォーマッタに2桁の数字が表示されるようにするにはどうすればよいですか?

+3

、とにかく通貨値を格納するために2進浮動小数点型を使用してはいけません。 BigDecimalを使用するか、整数をスケールするだけです(例えば、整数のセントを持つなど)。 –

答えて

23

また、あなたの通貨をすべて格納するために整数を使用することについてのJon Skeetのポイント - お金の浮動小数点エラーを処理したくない。

は、0.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); 
+0

完璧、ありがとう! –

+0

私は入力として0.0600を持っていて、出力として6,0 ctが必要な場合、どのようにフォーマットが見えるでしょうか? –

+0

あなたはコード内でこれを行う必要があります。私は恐れます - Decimalフォーマットはユニットの変更に対応しません。私はコンディション 'if(val < 1 && val > 0){// // 100を掛けてctフォーマッタを使う} else {// eurフォーマッタを使用} –

4

私は#、###、###、92,323,345,465.30はちょうど###使うよう92323345465.30のような通貨を表現するために、短い中

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

以下、このリンクでの素敵な解決策を見つけましたあなたが '0'を使用するたびに、 '0'が別の数字に置き換えられるか、またはそれを置き換える数字がない場合は、ITが表示されます。しかし '#'を使用して、 '#'を置き換える番号がない場合、そのスペースは空になります。

#,###.00使用:

あなたも、フォーマットの前になど、$のように独自のシンボルを追加することができ、さらには、フォーマット文字列の後に

2

が、私は良いオプションは、このaproachだと思うことを覚えておいてくださいしかし

$、50

、:値0.50のための結果は次のように表示されますあなたが結果は同じ値のため#,##0.00を使用する場合は、次のようになります。一般的には

$ 0.50

関連する問題