2011-12-19 64 views
11

Tôi cần phải định dạng (và không làm tròn) một số double đến 2 chữ số thập phân.Định dạng số double và không làm tròn số

Tôi đã thử với:

String s1 = "10.126"; 
Double f1 = Double.parseDouble(s1); 
DecimalFormat df = new DecimalFormat(".00"); 
System.out.println("f1"+df.format(f1)); 

Kết quả:

10.13 

Nhưng tôi yêu cầu đầu ra được 10.12

+0

này được hỏi cùng một tuần ở đây https://stackoverflow.com/questions/8486878/how-to-cut-off-decimal-in-java-without-rounding - điều này có nhiều tùy chọn hơn –

Trả lời

0

Bạn đã thử RoundingMode.FLOOR?

String s1 = "10.126"; 
Double f1 = Double.parseDouble(s1); 
DecimalFormat df = new DecimalFormat(".00"); 
df.setRoundingMode(RoundingMode.FLOOR); 

System.out.println("f1"+df.format(f1)); 
+0

Bạn có nghĩa là Math.round (arg0); ?? Thực ra sẽ làm tròn nó thành số nguyên gần nhất. –

+0

No DecimalFormat'sRoundingMode –

8

Bạn có thể thiết lập các chế độ làm tròn của formatter để XUỐNG:

df.setRoundingMode(RoundingMode.DOWN); 
16

Gọi setRoundingMode để thiết lập một cách thích hợp RoundingMode:

String s1 = "10.126"; 
Double f1 = Double.parseDouble(s1); 
DecimalFormat df = new DecimalFormat(".00"); 
df.setRoundingMode(RoundingMode.DOWN); // Note this extra step 
System.out.println(df.format(f1)); 

Output

10.12 
+0

Cảm ơn người đàn ông ... nhưng bạn đang sử dụng phiên bản java nào? –

+0

Cảm ơn gợi ý .. nhưng tôi cần sử dụng java 1.5 .. tôi đoán setRoundingMode() có sẵn trong 1.6 –

+0

Xem câu trả lời của tôi bằng BigDecimal thay vì – Brad

0

Nếu tất cả các bạn muốn làm là cắt một chuỗi tại hai chữ số thập phân, xem xét sử dụng chỉ Chuỗi chức năng như hình dưới đây:

String s1 = "10.1234"; 
String formatted = s1; 
int numDecimalPlaces = 2; 
int i = s1.indexOf('.'); 
if (i != -1 && s1.length() > i + numDecimalPlaces) { 
    formatted = s1.substring(0, i + numDecimalPlaces + 1); 
} 
System.out.println("f1" + formatted); 

này giúp tiết kiệm trên phân tích thành một đôi và sau đó định dạng lại thành một String.

+0

Cảm ơn người đàn ông .... tôi có thể sử dụng nó ... nhưng sau đó tôi muốn một cái gì đó nhỏ gọn hơn .. và tôi cũng cần phải làm một vài tính toán trên các giá trị này, vì vậy bất kỳ cách nào sẽ có một số lượng phân tích yêu cầu –

1

Tại sao không sử dụng BigDecimal

BigDecimal a = new BigDecimal("10.126"); 
BigDecimal floored = a.setScale(2, BigDecimal.ROUND_DOWN); // == 10.12 
Các vấn đề liên quan