2012-12-09 9 views
21

2桁の「amt」を小数点以下2桁というようにドル金額println( "$" + dollars + "。" +セント)で書式化する必要があります。Java形式の2倍の金額として

これを行う最善の方法は何ですか?

if (payOrCharge <= 1) 
{ 
    System.out.println("Please enter the payment amount:"); 
    double amt = keyboard.nextDouble(); 
    cOne.makePayment(amt); 
    System.out.println("-------------------------------"); 
    System.out.println("The original balance is " + cardBalance + "."); 
    System.out.println("You made a payment in the amount of " + amt + "."); 
    System.out.println("The new balance is " + (cardBalance - amt) + "."); 
} 
else if (payOrCharge >= 2) 
{ 
    System.out.println("Please enter the charged amount:"); 
    double amt = keyboard.nextDouble(); 
    cOne.addCharge(amt); 
    System.out.println("-------------------------------"); 
    System.out.println("The original balance is $" + cardBalance + "."); 
    System.out.println("You added a charge in the amount of " + amt + "."); 
    System.out.println("The new balance is " + (cardBalance + amt) + "."); 
} 
+0

ルック)**、途中で二重の代わりにBigDecimalのを使用して、通貨量を維持するための良いタイプではありません。 –

+0

重複していますか? - http://stackoverflow.com/questions/153724/how-to-round-a-number-to-n-decimal-places-in-java – mawaldne

答えて

7

は必ず2DPであなたのプリントアウト与えるのDecimalFormat

DecimalFormat df = new DecimalFormat("0.00"); 
System.out.println(df.format(amt)); 

を使用できます。

しかし、実際に、あなたはお金のためのBigDecimalを使用しなければならない、なぜなら浮動小数点問題の

40

使用NumberFormat.getCurrencyInstance()は:

double amt = 123.456;  

NumberFormat formatter = NumberFormat.getCurrencyInstance(); 
System.out.println(formatter.format(amt)); 

出力:

$123.46 
+0

これは正しい答えですが、 と一緒にutilをインポートする必要があります "import java.text.NumberFormat;" 上部にあります。 –

5

使用DecimalFormat 10進値を印刷します例えば所望のフォーマットで

DecimalFormat dFormat = new DecimalFormat("#.00"); 
System.out.println("$" + dFormat.format(amt)); 

あなたが試すよりも、米国の番号の形式で$量を表示したい場合は、次の

DecimalFormat dFormat = new DecimalFormat("####,###,###.00"); 
System.out.println("$" + dFormat.format(amt)); 

.00を使用して、それは常にかかわらず、その存在の小数点以下を出力します。小数点が存在する場合にのみ10進数を出力する場合は、書式文字列に.##を使用します。

+1

_...フォーマット##文字列で##を使用すると、$ 5.50の代わりに$ 5.5が表示されます – Gaket

3

あなたは、これが常に必要に応じて丸め、小数点以下を表示します1つのライナー用

System.out.printf("The original balance is $%.2f.%n", cardBalance); 

をprintf関数を使用することができます。

0

通貨タイプにdoubleの代わりにBigDecimalを使用します。私たちが見るのJavaのpuzzlersブックで :

System.out.println(2.00 - 1.10); 

、あなたはそれが0.9ではありません見ることができます。

String.format()には、数値の書式設定のパターンがあります。

-1
NumberFormat in=NumberFormat.getCurrencyInstance(); 
    double payment = 12324.134; 
    System.out.println("US: " + in.format(payment)); 

出力:** String.Formatの(で $ 12,324.13

+1

あなたはちょうどいくつかの回答を貼り付けてコピーします。出力はあなたのログとは異なり、BigDecimalが必要ですこの場合 –

関連する問題