2012-01-11 18 views
237

thể trùng lặp:
Round a double to 2 significant figures after decimal pointCách tốt nhất để định dạng một giá trị đúp để 2 Decimal đặt

tôi đang đối phó với rất nhiều giá trị tăng gấp đôi trong ứng dụng của tôi, là có bất kỳ cách dễ dàng thế nào để xử lý định dạng của các giá trị thập phân trong Java?

Có cách nào khác tốt hơn để làm việc đó hơn

DecimalFormat df = new DecimalFormat("#.##"); 

gì tôi muốn làm về cơ bản là định dạng giá trị tăng gấp đôi như

23.59004 to 23.59 

35.7 to 35.70 

3.0 to 3.00 

9 to 9.00 
+1

dễ hơn một dòng bổ sung? Tôi khá chắc chắn đó là cách đơn giản nhất, rõ ràng nhất để định dạng một số thập phân. Hãy lưu ý rằng nếu chương trình này sẽ được sử dụng bởi những người ở các miền địa phương khác nhau thì DecimalFormat sẽ sử dụng một ',' hoặc '.' thích hợp cho dấu tách thập phân. Điều này gây ra một số vấn đề trong một dự án tôi đã làm việc gần đây: viết vào một hộp văn bản và đọc sai giá trị từ nó. – Dogmatixed

+1

Thats những gì im rất nhiều lo lắng, tôi đọc rằng DecimalFormat theo miền địa phương mặc định. Bạn có thể cho tôi biết cách bạn làm việc này với nội địa hóa không? –

+0

Tôi đã sử dụng JFormattedTextFields cho đầu vào, điền chúng bằng cách sử dụng setValue() và đọc từ chúng bằng cách sử dụng getValue(). Đối với những nơi mà nó yêu cầu một số thập phân, tôi đã sử dụng đối tượng DecimalFormatSymbols. – Dogmatixed

Trả lời

380

Không, không có cách nào tốt hơn.

Thực ra bạn có lỗi trong mẫu của mình. Những gì bạn muốn là:

DecimalFormat df = new DecimalFormat("#.00"); 

Lưu ý "00", có nghĩa chính xác hai chữ số thập phân.

Nếu bạn sử dụng "#.##" (# có nghĩa là "bắt buộc" chữ số), nó sẽ thả trailing zero - tức là new DecimalFormat("#.##").format(3.0d); in ra chỉ "3", không "3.00".

+0

Thực ra, định dạng 3.0 với #. ## sẽ in 3. –

+0

khoảng 0,99 sẽ chuyển thành 0,99 hoặc 0,99? –

+15

@MubasharAhmad '" .99 "' - '#' có nghĩa là "số không bắt buộc". Nếu bạn muốn giữ nguyên số 0 đầu ra (tức là đầu ra '" 0,99 "') sử dụng mẫu '" # 0.00 "' – Bohemian

294

Một cách khác là sử dụng String.format:

double[] arr = { 23.59004, 
    35.7, 
    3.0, 
    9 
}; 

for (double dub : arr) { 
    System.out.println(String.format("%.2f", dub)); 
} 

đầu ra:

23.59 
35.70 
3.00 
9.00 

Bạn cũng có thể sử dụng System.out.format (chữ ký phương pháp tương tự), hoặc tạo một java.util.Formatter mà làm việc trong cùng một cách.

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