2012-04-26 29 views
9

Tôi muốn cắt một phao và một giá trị gấp đôi trong java.Cắt một phao và một đôi trong java

Sau đây là yêu cầu của tôi: 1. nếu tôi có 12.49688f, nó sẽ được in như 12,49 mà không làm tròn 2. nếu nó là 12,456 trong đôi, nó sẽ được in như 12.45 mà không làm tròn 3. Trong bất kỳ trường hợp nào nếu giá trị giống như 12.0, nó sẽ chỉ được in dưới dạng 12.

điều kiện 3 phải luôn được lưu ý. Nó phải đồng thời với logic cắt ngắn.

+0

Hãy xem tại địa chỉ: http://stackoverflow.com/questions/1976809/are-there-any-functions-for-truncating-a-double-in- java – BeRecursive

Trả lời

19

thử dùng ngoài trời

DecimalFormat df = new DecimalFormat("##.##"); 
df.setRoundingMode(RoundingMode.DOWN); 
System.out.println(df.format(12.49688f)); 
System.out.println(df.format(12.456)); 
System.out.println(df.format(12.0)); 

này đây, chúng ta đang sử dụng định dạng số thập phân cho Formating. Các roundmode được thiết lập để DOWN, do đó nó sẽ không tự động làm tròn vị trí thập phân.

Kết quả dự kiến ​​là:

12.49 
12.45 
12 
+0

Việc bản địa hóa áp dụng cho ví dụ. Tùy thuộc vào miền địa phương mặc định, đầu ra sẽ là 12,49 ví dụ. – Benites

1

Kiểm tra java.math.BigDecimal.round(MathContext).

+0

Phương pháp đó dường như không tồn tại? [Tài liệu API] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html) –

+0

@jimmycarr http://docs.oracle.com/javase/7/docs/ api/java/math/BigDecimal.html # round (java.math.MathContext) – Torben

+0

Wow ... làm thế nào tôi đã bỏ lỡ điều đó? Cảm ơn @Torben –

1

hãy xem với DecimalFormat():

DecimalFormat df = new DecimalFormat("#.##"); 
DecimalFormatSymbols dfs = new DecimalFormatSymbols(); 
dfs.setDecimalSeparator(','); 
df.setDecimalFormatSymbols(dfs); 
+1

Thay đổi nó để sử dụng '#' thay vì '0' và nó sẽ hoạt động như được chỉ định. – Dunes

4
double d = <some-value>; 
System.out.println(String.format("%.2f", d - 0.005); 
4

Tôi có cùng một vấn đề sử dụng Android, bạn có thể sử dụng thay vì:

DecimalFormat df = new DecimalFormat("##.##"); 
df.setRoundingMode(RoundingMode.DOWN); 

nhưng đối với API này Cấp 9 là bắt buộc.

Một giải pháp nhanh chóng là:

double number = 12.43543542; 
int aux = (int)(number*100);//1243 
double result = aux/100d;//12.43 
Các vấn đề liên quan