2012-12-09 6 views
21

Ich muss die doppelte "amt" als Dollar Betrag println ("$" + Dollar + "." + Cent) so formatieren, dass es zwei Nachkommastellen gibt.Java - Format Doppelwert als Dollarbetrag

Was ist der beste Weg, dies zu tun?

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

Look at ** String.format() **, durch die Art und Weise doppelt keine gute Art ist Währungsbeträge zu halten, verwenden BigDecimal statt. –

+0

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

Antwort

7

können Sie einen DecimalFormat verwenden

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

, dass Sie mit immer 2dp einen Ausdruck geben.

Aber wirklich, sollten Sie BigDecimal für Geld, weil der Floating-Point gibt

40

Verwendung NumberFormat.getCurrencyInstance() werden:

double amt = 123.456;  

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

Ausgang:

$123.46 
+0

Dies ist die richtige Antwort, Sie müssen das util obwohl mit importieren "import java.text.NumberFormat;" an der Spitze. –

5

Verwenden DecimalFormat drucken einen Dezimalwert im gewünschten Format z

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

Wenn Sie als versuchen, $ Betrag in US-Nummer-Format angezeigt werden sollen:

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

.00 Verwendung, druckt es immer zwei Dezimalstellen unabhängig von ihrer Anwesenheit. Wenn Sie nur dann dezimal drucken möchten, wenn sie vorhanden sind, verwenden Sie .## in der Formatzeichenfolge.

+1

_... dann verwenden. ## im format string._ - dies zeigt Ihnen $ 5,5 anstelle von $ 5,50 – Gaket

3

Sie können printf für einen Einzeiler

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

Dies nutzen immer zwei Dezimalstellen drucken, je nach Bedarf Rundung.

0

Verwenden Sie BigDecimal statt Double für Währungstypen. In Java Puzzlers Buch, das wir sehen:

System.out.println(2.00 - 1.10); 

und man kann es nicht sein 0.9 sehen.

String.format() hat Muster zum Formatieren von Zahlen.

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

Ausgang: 12,324.13 $

+1

Sie kopieren einfach einfügen einige Antwort, die Ausgabe unterscheidet sich von Ihrem Protokoll, verwenden Sie ein Doppel, während BigDecimal benötigt wird dieser Fall –