2011-12-28 73 views
44

Tôi đang sử dụng NumberFormat.getCurrencyInstance(myLocale) để nhận định dạng tiền tệ tùy chỉnh cho ngôn ngữ do tôi cung cấp. Tuy nhiên, điều này luôn bao gồm ký hiệu tiền tệ mà tôi không muốn, tôi chỉ muốn định dạng số tiền tệ thích hợp cho miền địa phương đã cho của tôi mà không có ký hiệu tiền tệ.Định dạng tiền tệ không có ký hiệu tiền tệ

Làm một format.setCurrencySymbol(null) ném một ngoại lệ ..

+1

Bạn đã thử '.setCurrencySymbol (" ")' chưa? –

+0

@home: http://docs.oracle.com/javase/6/docs/api/java/text/DecimalFormatSymbols.html –

+4

Khi không cần tiền tệ, tại sao không sử dụng 'SốFormat # getInstance (Ngôn ngữ)' ? – Robin

Trả lời

40

Các công trình sau đây. Đó là một chút xấu xí, nhưng nó đáp ứng các hợp đồng:

NumberFormat nf = NumberFormat.getCurrencyInstance(); 
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols(); 
decimalFormatSymbols.setCurrencySymbol(""); 
((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols); 
System.out.println(nf.format(12345.124).trim()); 

Bạn cũng có thể nhận được các mô hình từ định dạng tiền tệ, loại bỏ các ký hiệu tiền tệ, và tái tạo lại một định dạng mới từ mô hình mới:

NumberFormat nf = NumberFormat.getCurrencyInstance(); 
String pattern = ((DecimalFormat) nf).toPattern(); 
String newPattern = pattern.replace("\u00A4", "").trim(); 
NumberFormat newFormat = new DecimalFormat(newPattern); 
System.out.println(newFormat.format(12345.124)); 
+0

Yep cảm ơn rất nhiều, DecimalFormatSymbols đã làm các trick tôi đang tìm kiếm .. – anderswelt

+0

Cho đến khi bạn sử dụng số tiền âm, sau đó nó cho thấy Symbol một lần nữa. Tôi chắc chắn đó phải là một lỗi. –

35

Set nó với một chuỗi rỗng thay vì:

DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US); 
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols(); 
symbols.setCurrencySymbol(""); // Don't use null. 
formatter.setDecimalFormatSymbols(symbols); 
System.out.println(formatter.format(12.3456)); // 12.35 
+0

điều này cũng không kém, mặc dù chỉ có thể chọn một câu trả lời đúng một .. – anderswelt

+2

Tôi nghĩ rằng điểm là những gì Robin đã viết: Không có nhu cầu cho 'getCurrencyInstance', chỉ cần sử dụng' getNumberInstance' – AdrianRM

+0

Tôi nghĩ bạn cũng có thể cần phải đặt 'formatter.setMinimumFractionDigits (2);' trong ví dụ thứ hai của bạn . – JoshDM

2

cần có cho định dạng tiền tệ "KHÔNG CÓ ký hiệu", khi bạn có báo cáo hoặc lượt xem lớn và hầu như tất cả các cột đại diện cho giá trị tiền tệ, biểu tượng gây phiền toái, không cần biểu tượng. dấu phẩy thập phân. U cần

new DecimalFormat("#,##0.00"); 

và không

new DecimalFormat("$#,##0.00"); 
+1

Điều này chỉ hữu ích nếu Ngôn ngữ là Hoa Kỳ, Canada, Úc, v.v. Nó không hoạt động đối với Sterling hoặc Euro (nơi một số quốc gia sử dụng dấu thập phân thay vì dấu phẩy cho dấu tách nghìn). – vegemite4me

+2

Bài đăng không phải là về việc sử dụng dấu chấm hoặc dấu phẩy như nghìn dấu tách, u bị tắt chủ đề – FiruzzZ

+0

Tôi vẫn nhận được đối với DecimalFormat df = new DecimalFormat ("#, ## 0.00"); Ngoại lệ trong chuỗi "chính" java.text.ParseException: Số không thể chia sẻ: "$ 400.00" – Dejell

0
DecimalFormat df = new DecimalFormat(); 
df.setMinimumFractionDigits(2); 
String formatted = df.format(num); 

trình với nhiều loại cho num, nhưng đừng quên represent currency with BigDecimal.

Đối với các trường hợp khi num của bạn có thể có nhiều hơn hai chữ số sau dấu thập phân, bạn có thể sử dụng df.setMaximumFractionDigits(2) để chỉ hiển thị hai, nhưng điều đó chỉ có thể che giấu sự cố cơ bản với bất kỳ ai đang chạy ứng dụng.

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