2012-12-09 66 views
21

我需要格式化雙倍「amt」作爲美元金額println(「$」+美元+「。」+美分),以便在小數點後有兩位數字。Java - 格式雙值作爲美元金額

這樣做最好的方法是什麼?

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

看**的String.format()**,順便雙是不是一個好型保持貨幣金額,使用的BigDecimal代替。 –

+0

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

回答

7

您可以使用一個DecimalFormat

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

這會給你打印出帶有總是2DP。

不過說真的,你應該用BigDecimal的錢,因爲浮點問題

40

使用NumberFormat.getCurrencyInstance()

double amt = 123.456;  

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

輸出:

$123.46 
+0

這是正確的答案,您需要導入實用程序,但與 「import java.text.NumberFormat;」 頂部。 –

5

使用DecimalFormat打印十進制值以期望的格式,例如

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

如果你想顯示在美國數字格式$量不是嘗試:

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

使用.00,它總是打印,不論其存在的兩個小數點。如果只想在打印小數點時纔打印小數點,則在格式字符串中使用.##

+1

_...然後在格式字符串中使用。## - 這會告訴你$ 5.5而不是$ 5.50 – Gaket

3

您可以用printf的一個襯墊

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

這將始終打印小數點後兩位,四捨五入的要求。

0

對貨幣類型使用BigDecimal而不是double。 在Java謎題本書中,我們看到:

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)); 

輸出: $ 12,324.13

+1

你只需複製粘貼一些答案,輸出不同於你的日誌,你需要使用double而需要BigDecimal這個案例 –