2010-08-03 33 views
64

Tôi có trường BigDecimalamount đại diện cho tiền và tôi cần in giá trị của nó trong trình duyệt ở định dạng như $123.00, $15.50, $0.33.Làm cách nào để in các giá trị BigDecimal được định dạng?

Tôi có thể làm như thế nào?

(Giải pháp đơn giản duy nhất mà tôi thấy mình là nhận được floatValue từ BigDecimal và sau đó sử dụng NumberFormat để tạo độ chính xác hai chữ số cho phần phân số).

Trả lời

94
public static String currencyFormat(BigDecimal n) { 
    return NumberFormat.getCurrencyInstance().format(n); 
} 

Nó sẽ sử dụng ngôn ngữ của bạn để chọn ký hiệu tiền tệ của bạn. NumberFormat's javadoc

30

Một cách khác mà có thể làm cho tinh thần cho tình huống cụ thể là

BigDecimal newBD = oldBD.setScale(2); 

Tôi chỉ nói điều này vì trong một số trường hợp khi nói đến tiền đi ngoài 2 chữ số thập phân không có ý nghĩa. Lấy này một bước xa hơn, điều này có thể dẫn đến

String displayString = oldBD.setScale(2).toPlainString(); 

nhưng tôi chỉ muốn làm nổi bật phương pháp setScale (mà cũng có thể mất một đối số chế độ làm tròn thứ hai để kiểm soát cách mà nơi thập phân cuối cùng được xử lý. Trong một số tình huống, Java buộc bạn chỉ định phương thức làm tròn này).

26

Để thiết ngàn tách, nói 123,456.78 bạn phải sử dụng DecimalFormat:

 DecimalFormat df = new DecimalFormat("#,###.00"); 
    System.out.println(df.format(new BigDecimal(123456.75))); 
    System.out.println(df.format(new BigDecimal(123456.00))); 
    System.out.println(df.format(new BigDecimal(123456123456.78))); 

Dưới đây là kết quả:

123,456.75 
123,456.00 
123,456,123,456.78 

Mặc dù tôi đặt #,###.00 mặt nạ, nó định dạng thành các giá trị còn quá. Lưu ý rằng dấu phẩy (,) trong kết quả phụ thuộc vào ngôn ngữ của bạn. Nó có thể chỉ là không gian() cho miền địa phương của Nga.

+11

Nếu bạn thích không được hiển thị như 0.00 (thay vì 0,00), sử dụng mô hình '" # Thay vào đó, ## 0.00 ". – Jonik

1
BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN) 
+0

Phải là BigDecimal (19.001) .setScale (2, BigDecimal.ROUND_HALF_UP) .toString() –

3
BigDecimal pi = new BigDecimal(3.14); 
BigDecimal pi4 = new BigDecimal(12.56); 

System.out.printf("%.2f",pi); 

// Hiển 3,14

System.out.printf("%.0f",pi4); 

// Hiển thị 13

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