2010-12-29 33 views
25

Tôi sống ở Bỉ. Và nói chung, trong toán học, chúng tôi viết số thập phân của chúng tôi bằng dấu phẩy như sau: 3,141592
Và đó cũng là kết quả khi tôi định dạng phao.Java: Định dạng Float phụ thuộc vào Locale

System.out.println(String.format("%f", 3.141592)); 

Vì vậy, . được thay thế bằng một , như vậy: 3,141592. Vì vậy, luôn luôn khi tôi cần một điểm thay vì tôi phải thêm một cái gì đó như thế này: String.format("%f", 3.14).replace(',','.');

Vì vậy, câu hỏi là: có cách nào để thay đổi miền địa phương mà làm cho mọi định dạng trong Java sử dụng một điểm, thay vì dấu phẩy?

Cảm ơn


System.out.println(Locale.getDefault()); 

in

nl_BE 
+0

Bạn có muốn chỉ thay đổi định dạng số hoặc liệu có ổn không nếu mọi thứ khác cũng thay đổi thành ngôn ngữ Hoa Kỳ? – Thilo

+0

Thú vị tôi muốn thấy điều đó, defaultLocale của bạn là gì ?? –

+0

@Thilo: Nếu có thể: chỉ định dạng số. –

Trả lời

42

Thử sử dụng String.format(Locale.US, "%f", floatValue) để chỉ đặt ngôn ngữ được sử dụng trong khi định dạng.

9

Một giải pháp đơn giản, nhưng sẽ rộng đạt trên toàn bộ Locale, sẽ được thiết lập Locale hệ thống để Mỹ hoặc Anh. Thí dụ.

Locale.setDefault(Locale.US); 

Vì bạn đã thay đổi câu hỏi, khi đó bạn chỉ cần chỉ định địa phương bằng phương thức in của mình.

System.out.println(String.format(Locale.US, "%f", 3.141592)); 
+2

Vấn đề với điều này là bạn nhận được dấu phẩy là dấu phân cách hàng nghìn, và nó trở nên rất khó hiểu đối với người dùng Pháp hoặc Bỉ. TouhsandsSeparator của chúng ta là không gian, và dấu phẩy là dấu tách thập phân của chúng ta. – LaGrandMere

+3

Hoặc sử dụng 'String.format (Locale.US,"% f ", floatValue)' để chỉ thiết lập ngôn ngữ được sử dụng trong khi định dạng. – rodion

+0

@rodion: Bạn có thể thêm câu trả lời của mình dưới dạng câu trả lời thực sự không? –

1

Đối với số định dạng, bạn thực sự không nên dựa vào toString(). Sử dụng String.format(), phương pháp nhà máy ở NumberFormat hoặc DecimalFormat, cho phép bạn kiểm soát cách định dạng số (hai số đầu tiên bằng cách chọn Ngôn ngữ) mà không dựa vào một số cài đặt chung.

+3

toString đáng tin cậy là không phụ thuộc vào miền địa phương. – Thilo

7

Nó có thể hữu ích để nhìn vào http://download.oracle.com/javase/6/docs/api/java/text/DecimalFormat.html trong đó có một số tùy chọn cho đầu ra chính xác các chuỗi sử dụng Locale khi cần thiết

DecimalFormat là một lớp con bê tông của NumberFormat rằng định dạng số thập phân số. Nó có một loạt các tính năng được thiết kế để có thể phân tích cú pháp và số định dạng ở bất kỳ ngôn ngữ nào, bao gồm hỗ trợ cho các số phương Tây, Ả Rập, và chữ số. Nó cũng hỗ trợ các loại số khác nhau, bao gồm số nguyên (123), số điểm cố định (123.4), ký hiệu khoa học (1.23E4), tỷ lệ phần trăm (12%) và tiền Tất cả các nội dung này có thể là được bản địa hóa.

Thường hữu ích khi định tuyến đầu vào và đầu ra thông qua các thói quen riêng biệt. Dưới đây là một từ thư viện JAMA (http://math.nist.gov/javanumerics/jama/)

public void print (PrintWriter output, int w, int d) { 
     DecimalFormat format = new DecimalFormat(); 
     format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US)); 
     format.setMinimumIntegerDigits(1); 
     format.setMaximumFractionDigits(d); 
     format.setMinimumFractionDigits(d); 
     format.setGroupingUsed(false); 
     print(output,format,w+2); 
    } 

Bằng cách sử dụng này, bạn có thể chắc chắn rằng các vấn đề và cải tiến trong tương lai có thể sẽ được giải quyết

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