2012-12-09 9 views
21

Potrzebuję sformatować podwójne "amt" jako dolną kwotę println ("$" + dolary + "." + Centy) takie, że po przecinku są dwie cyfry.Java - podwójna wartość formatu jako kwota w dolarach

Jaki jest najlepszy sposób na zrobienie tego?

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

Spójrz ** string.Format() **, w drodze podwójnej nie jest dobry typ na utrzymanie ilości waluty, należy użyć BigDecimal zamiast. –

+0

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

Odpowiedz

7

Można użyć DecimalFormat

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

który daje wydruk ze zawsze 2DP.

Ale naprawdę, należy używać BigDecimal dla pieniędzy, z powodu zmiennoprzecinkowych wystawia

40

Korzystając NumberFormat.getCurrencyInstance():

double amt = 123.456;  

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

wyjściowa:

$123.46 
+0

To jest poprawna odpowiedź, musisz zaimportować util jednak z "import java.text.NumberFormat;" u góry. –

5

Zastosowanie DecimalFormat aby wydrukować wartość dziesiętną w pożądanym formacie np

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

Jeśli chcesz wyświetlać w US $ wysokość formatu liczbowego niż próbować:

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

Korzystanie .00, zawsze drukuje dwóch miejsc po przecinku, niezależnie od ich obecności. Jeśli chcesz drukować dziesiętnie tylko wtedy, gdy są obecne, użyj .## w ciągu formatującym.

+1

_... następnie użyj. ## w formacie string._ - pokaże ci 5,5 $ zamiast 5,50 $ – Gaket

3

Można użyć printf na jedną wkładką

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

To zawsze będzie drukować dwa miejsca po przecinku, zaokrąglając w miarę potrzeb.

0

Użyj BigDecimal zamiast podwójnego dla typów walut. w Javie puzzlers książce widzimy:

System.out.println(2.00 - 1.10); 

i widać, że nie będzie 0,9.

String.format() ma wzorce do formatowania liczb.

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

wyjściowa: $ 12,324.13

+1

Po prostu skopiuj wklej odpowiedź, wynik różni się od logu, użyjesz podwójnego, podczas gdy BigDecimal jest potrzebny w ta sprawa –

Powiązane problemy