2012-10-27 41 views
5

Tôi đang sử dụng NumberFormat.getCurrencyInstance().format(amount) để định dạng đơn vị tiền tệ từ BigDecimal thành chuỗi. Điều này làm việc như mong đợi vấn đề là mục tiêu chính của chúng tôi là thị trường Hà Lan và định dạng dutch mặc định là lạ.Cài đặt miền địa phương ghi đè Java cho miền địa phương cụ thể

Hãy để tôi giải thích, khi định dạng -125 tôi nhận được "€ 125-" cho tiếng Hà Lan (dự kiến ​​là "- € 125"). Uk hoạt động như mong đợi cho "- £ 125,50".

Tôi có thể kiểm tra xem ngôn ngữ là tiếng Hà Lan và sau đó cung cấp mẫu mỗi khi tôi muốn định dạng số thập phân. Nhưng tôi thích một giải pháp ghi đè cài đặt định dạng hà lan. Tôi đã suy nghĩ về điều gì đó như sau:

Locale nlLocale = new Locale("nl", "NL"); 
NumberFormat.getCurrencyInstance(new Locale("nl", "NL")).setFormatPattern("€ #"); 

Vì vậy, mỗi lần tôi sử dụng ngôn ngữ Hà Lan khi định dạng tôi nhận được định dạng tùy chỉnh của mình. Có một giải pháp tương tự tồn tại?

+0

Tại sao bạn muốn thay đổi định dạng Hà Lan? Bạn sẽ không nhầm lẫn chúng bằng cách chọn một tùy chọn định dạng không chuẩn (cho tiếng Hà Lan). – Dunes

+0

Tôi đã sử dụng [đóng] (http://www.java2s.com/Open-Source/Android/android-core/platform-libcore/libcore/java/text/OldNumberFormatTest.java.htm)/[similair] (Lớp học http://www.java2s.com/Tutorial/Java/0040__Data-Type/Helperclassforformatnumberandcurrency.htm) cho Swing GUI, bạn có thể tạo ma trận riêng cho số dưới dạng Phân số quá – mKorbel

+0

@Dunes người dùng mong đợi một định dạng khác với java đang cung cấp cho dutch (biểu tượng dấu trừ được dự kiến ​​sẽ là mặt trước của nr, không phải phía sau). mKorbel, tôi nghĩ về việc gói mỗi cuộc gọi thành định dạng, đây sẽ là phương sách cuối cùng của tôi nhưng tôi hy vọng tôi có thể ghi đè lên một số cài đặt cho miền địa phương cụ thể – Rob

Trả lời

2

Gác lại những câu hỏi liệu rằng định dạng cụ thể là "đúng" hay không, cách thay đổi các trường hợp tệ cho miền địa phương "nl" là để thực hiện và cấu hình tùy chỉnh LocaleServiceProvider cho dịch vụ định dạng số. (Lớp nhà cung cấp cần phải phân lớp NumberFormatProvider, nhưng lớp javadoc siêu lớp giải thích cách định cấu hình nhà cung cấp.)

Nhà cung cấp cần trả về một cá thể không chuẩn NumberFormat cho trường hợp cụ thể mà bạn quan tâm, nhưng (có lẽ) ủy quyền đến nhà cung cấp mặc định trong các trường hợp khác.

+0

Cảm ơn, hãy thử ASAP đó! – Rob

0

Bạn có thể tạo định dạng tùy chỉnh của riêng mình. Có một cái nhìn tại liên kết sau:

http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html

+0

Điều này sẽ không hoạt động vì tôi muốn ghi đè mẫu địa phương cụ thể (vì vậy tôi sẽ không phải cung cấp một mẫu tùy chỉnh mỗi khi tôi cần định dạng tiền tệ) và không chỉ cung cấp một mẫu tùy chỉnh mỗi khi tôi định dạng – Rob

0

Sử dụng các phương pháp applyPattern:

final DecimalFormat df = (DecimalFormat)NumberFormat.getCurrencyInstance(locale); 
df.applyPattern("¤#,##0.##"); 
+0

Khi sử dụng 'getCurrencyInstance' bạn tạo một phiên bản mới của trình định dạng. Do đó bạn sẽ phải áp dụng các mẫu cụ thể mỗi khi bạn muốn định dạng. Tôi muốn đặt định dạng một lần và áp dụng nó cho tất cả các trình định dạng được trả về bởi getCurrencyInstance – Rob

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