2012-05-31 85 views
11

Có một số đang của biểu mẫu sau đây được sử dụng cho các giá trị số định dạng hiện có:Java String.format với ký hiệu tiền tệ

String.format(pattern, value) 

Lưu ý rằng tôi không thể thay đổi mã tự - Tôi chỉ có thể thay đổi mẫu định dạng được cung cấp cho mã.

Mẫu định dạng để xuất ký hiệu tiền tệ cho ngôn ngữ mặc định là gì? Về cơ bản, tôi muốn đạt được kết quả như sau:

String.format("...", 123) => $ 123 
+0

Có lẽ đáng xem [NumberFormat] (http://docs.oracle.com/javase/6/docs/api/java/text/NumberFormat.html#format (Dài)). –

+0

được sửa đổi để đề cập đến tôi không thể thay đổi mã số –

+0

@MarcPolizzi: bạn không thể thay đổi mã, nhưng bạn * có thể * thay đổi chuỗi định dạng (có lẽ được chỉ định ở nơi khác) - có đúng không? –

Trả lời

4

Với những hạn chế bạn đã đưa ra, tôi nghĩ rằng nó là không thể đạt được nó. Để xem biểu tượng tiền tệ của Locale hiện tại, bạn sẽ cần tối thiểu mã.

Nếu bạn hoàn toàn không có cách nào để thêm mã vào chương trình, bạn nên sử dụng biểu tượng được thiết lập cho "currency" (¤). Nó được thiết lập cho mục đích chính xác này, để tượng trưng cho tiền tệ vắng mặt bất kỳ biểu tượng cụ thể hơn.

Nếu bạn không thể thay đổi mã đã cho, nhưng thêm mã vào toàn bộ dự án, bạn có thể sử dụng mã đó để tìm biểu tượng được sử dụng tốt nhất. Một khi bạn có nó, bạn có thể sử dụng nó để tạo ra một mẫu cho mã hiện có để sử dụng cho việc định dạng.

Nếu bạn có thể tìm hiểu trong đó Locale chương trình gốc sẽ chạy tiếp theo, bạn có thể viết chương trình trợ lý sử dụng cài đặt đó để điền vào cấu hình của bạn.

4

Bạn có thể thử như sau:

public static void main(String[] args) { 
    System.out.println(String.format(" %d \u20AC", 123)); // %d for integer 
    System.out.println(String.format(" %.2f \u20AC", 123.10)); // %f for floats 
} 

này in:

123 € 
123.10 € 
-2
String formatstring=String.format("$%s", 123); 
    System.out.println(formatstring); 
+0

Có vẻ như không in biểu tượng EURO nếu địa phương của JVM của tôi là tiếng Pháp; vẫn hiển thị $ –

+0

ohhh xin lỗi. Tôi nghĩ bạn muốn in $. –

11

Không cần phải phát minh lại bánh xe. DecimalFormat đi kèm với hỗ trợ tiền tệ:

String output = DecimalFormat.getCurrencyInstance().format(123.45); 

này cũng đi kèm với sự hỗ trợ locale đầy đủ bằng tùy chọn đi qua trong một Locale:

String output = DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45); 

Dưới đây là một thử nghiệm:

System.out.println(DecimalFormat.getCurrencyInstance().format(123.45)); 
System.out.println(DecimalFormat.getCurrencyInstance(Locale.GERMANY).format(123.45)) ; 

Output:

$123.45 
123,45 € 
1

Nếu không có Ngôn ngữ mặc định sẵn có, chúng tôi có thể sử dụng định dạng đơn vị tiền tệ và định dạng thập phân. Như trong mã bên dưới:

Ví dụ: Đặt ký hiệu tiền tệ Ấn Độ và định dạng giá trị. Điều này sẽ hoạt động mà không cần người dùng thực hiện thay đổi trong cài đặt.

Locale locale = new Locale("en","IN"); 
DecimalFormat decimalFormat = (DecimalFormat) DecimalFormat.getCurrencyInstance(locale); 
DecimalFormatSymbols dfs = DecimalFormatSymbols.getInstance(locale); 
dfs.setCurrencySymbol("\u20B9"); 
decimalFormat.setDecimalFormatSymbols(dfs); 
System.out.println(decimalFormat.format(12324.13)); 

Output:

₹12,324.13 
Các vấn đề liên quan