2012-12-09 14 views
21

Ho bisogno di formattare il doppio "amt" come un importo in dollari println ("$" + dollari + "." + Centesimi) in modo che ci siano due cifre dopo il decimale.Java: doppio valore del formato come importo in dollari

Qual è il modo migliore per farlo?

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() **, tra l'altro non è un buon doppio tipo per mantenere gli importi in valuta, utilizzare BigDecimal invece. –

+0

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

risposta

7

È possibile utilizzare un DecimalFormat

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

che vi darà una stampa con sempre 2DP.

Ma in realtà, si dovrebbe utilizzare BigDecimal-prezzo, a causa della virgola mobile emette

40

Uso NumberFormat.getCurrencyInstance():

double amt = 123.456;  

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

uscita:

$123.46 
+0

Questa è la risposta corretta, è necessario importare l'util però con "import java.text.NumberFormat;" nella parte superiore. –

5

Usa DecimalFormat per stampare un valore decimale nel formato desiderato es

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

Se si desidera visualizzare $ importo in formato numerico degli Stati Uniti che cercare:

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

Utilizzando .00, stampa sempre due punti decimali a prescindere dalla loro presenza. Se si desidera stampare decimali solo quando sono presenti, utilizzare .## nella stringa di formato.

+1

_... quindi utilizzare. ## nel formato string._ - questo mostrerà $ 5,5 invece di $ 5,50 – Gaket

3

È possibile utilizzare printf per un uno di linea

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

Questo sarà sempre stampare due cifre decimali, i necessari arrotondamenti.

0

Utilizzare BigDecimal anziché double per i tipi di valuta. in Java Puzzlers libro vediamo:

System.out.println(2.00 - 1.10); 

e si può vedere che non sarà 0.9.

String.format() ha motivi per la formattazione dei numeri.

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

uscita: $ 12,324.13

+1

Basta copiare incollare qualche risposta, l'output è diverso dal log, si usa un doppio mentre BigDecimal è necessario in questo caso –

Problemi correlati