2012-12-09 31 views
21

Tôi cần phải định dạng chữ "amt" kép thành số đô la ("$" + đô la + "." + Cent) sao cho có hai chữ số sau dấu thập phân.Giá trị kép định dạng Java là số tiền đô la

Cách tốt nhất để làm gì?

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

Nhìn vào ** String.format() **, bằng cách này đôi không phải là một loại tốt để giữ một lượng tiền tệ, sử dụng BigDecimal để thay thế. –

+0

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

Trả lời

7

Bạn có thể sử dụng một DecimalFormat

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

Điều đó sẽ cung cấp cho bạn một bản in ra với luôn 2dp.

Nhưng thực sự, bạn nên sử dụng BigDecimal với tiền bỏ ra, vì điểm nổi vấn đề

40

Sử dụng NumberFormat.getCurrencyInstance():

double amt = 123.456;  

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

Output:

$123.46 
+0

Đây là câu trả lời chính xác, bạn cần phải nhập các util mặc dù với "nhập java.text.NumberFormat;" ở trên cùng. –

5

Sử dụng DecimalFormat in một giá trị thập phân ở định dạng mong muốn

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

Nếu bạn muốn hiển thị $ tiền trong định dạng số Mỹ hơn thử:

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

Sử dụng .00, nó luôn luôn in hai điểm thập phân không phụ thuộc vào sự hiện diện của họ. Nếu bạn chỉ muốn in số thập phân khi có mặt thì sử dụng .## trong chuỗi định dạng.

+1

_... sau đó sử dụng. ## trong chuỗi định dạng._ - điều này sẽ hiển thị cho bạn $ 5,5 thay vì $ 5.50 – Gaket

3

Bạn có thể sử dụng printf cho một liner

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

này sẽ luôn in hai chữ số thập phân, làm tròn theo yêu cầu.

0

Sử dụng BigDecimal thay vì tăng gấp đôi cho loại tiền tệ. Trong sách Puzzlers Java, chúng tôi thấy:

System.out.println(2.00 - 1.10); 

và bạn có thể thấy nó sẽ không bằng 0,9.

String.format() có các mẫu cho số định dạng.

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

đầu ra: $ 12,324.13

+1

Bạn chỉ cần sao chép dán một số câu trả lời, đầu ra khác với nhật ký của bạn, bạn sử dụng gấp đôi trong khi BigDecimal là cần thiết trường hợp này –

Các vấn đề liên quan