Làm cách nào để nhận được NumberFormat.getCurrencyInstance()
để in giá trị tiền tệ USD âm với dấu trừ?Định dạng số tiền âm của USD với dấu trừ, không phải dấu ngoặc vuông (Java)
Trả lời
Dưới đây là một trong tôi luôn luôn kết thúc bằng cách sử dụng trong một lớp học java hoặc thông qua fmt: thẻ JSTL formatNumber:
DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00");
String formatted = format.format(15.5);
Nó luôn luôn tạo ra ít nhất một $ 0.00 và phù hợp khi được hiển thị. Cũng bao gồm hàng nghìn người dùng khi cần thiết. Bạn có thể di chuyển dấu trừ ở phía trước ký hiệu đô la nếu đó là yêu cầu của bạn.
Có lẽ cách tốt nhất là tạo DecimalFormat
của riêng bạn nếu bạn muốn định dạng cụ thể thay vì dựa vào mặc định.
Chỉnh sửa: Bạn cũng có thể truyền kết quả của NumberFormat.getCurrencyInstance() tới DecimalFormat
và điều chỉnh nó theo sở thích của bạn.
Nó đòi hỏi một chút tinh chỉnh của DecimalFormat trả về bởi NumberFormat.getCurrencyInstance()
để làm điều đó một cách độc lập về miền địa phương. Đây là những gì tôi đã (thử nghiệm trên Android):
DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance();
String symbol = formatter.getCurrency().getSymbol();
formatter.setNegativePrefix(symbol+"-"); // or "-"+symbol if that's what you need
formatter.setNegativeSuffix("");
IIRC, Currency.getSymbol()
có thể không trả về giá trị cho tất cả các miền địa phương cho tất cả các hệ thống, nhưng nó phải làm việc cho những người lớn (và tôi nghĩ rằng nó có một dự phòng hợp lý trên riêng của nó, vì vậy bạn không cần phải làm bất cứ điều gì)
Hãy thử:
NumberFormat.getCurrencyInstance(Locale.CANADA);
NumberFormat.getCurrencyInstance(Locale.UK);
có lẽ bạn là đúng, nhưng ứng dụng của tôi sẽ có thể f ormat tiền tệ trong miền địa phương có thể. Nó sẽ không quá khó để thực hiện định hình cho tất cả những miền địa phương? –