2012-12-07 55 views
6

Có thể bản địa hóa các số trong String.format gọi cùng một cách với NumberFormat.format không?java String.format: số có nội địa hóa

Tôi đã mong đợi nó chỉ đơn giản là sử dụng

String.format(locale, "%d", number) 

nhưng điều này không trả lại kết quả tương tự như nếu sử dụng NumberFormat. Ví dụ:

String.format(Locale.GERMAN, "%d", 1234567890) 

cho: "1234567890", trong khi

NumberFormat.getNumberInstance(Locale.GERMAN).format(1234567890) 

cho: "1.234.567.890"

Nếu nó không thể được thực hiện, những gì đang đề nghị mở đường cho địa hóa văn bản bao gồm số?

+2

tại sao bạn không phân tích của bạn "String-Số" sang số đầu tiên và thực hiện định dạng với số lượng định dạng sau đó? – Chris

+0

"Chuỗi số" của tôi có thể là một chuỗi chứa số, vì vậy tôi không thể phân tích cú pháp thành số. – wziska

Trả lời

9

Từ documentation, bạn phải:

  • cung cấp một miền địa phương (như bạn đang làm trong ví dụ của bạn)
  • bao gồm '' cờ để chương trình bản địa đặc thù tách nhóm

Vì vậy, ví dụ của bạn sẽ trở thành:

String.format(Locale.GERMAN, "%,d", 1234567890) 

Lưu ý cờ ',' bổ sung trước 'd'.

+0

Hoàn hảo! Không biết làm thế nào tôi bỏ lỡ nó đọc tài liệu. – wziska

2

Một thay thế cho String.format() là sử dụng MessageFormat:

MessageFormat format = new MessageFormat("The number is {0, number}", Locale.GERMAN); 
String s = format.format(new Object[] {number}); 
Các vấn đề liên quan