2013-04-30 25 views
13

Tôi đang cố định dạng một số số trong chương trình Java. Các con số sẽ là cả hai và số nguyên. Khi xử lý tăng gấp đôi, tôi muốn giữ chỉ hai dấu thập phân nhưng khi xử lý số nguyên tôi muốn chương trình giữ chúng không bị ảnh hưởng. Nói cách khác:Java: Sử dụng DecimalFormat để định dạng tăng gấp đôi và số nguyên nhưng giữ số nguyên không có dấu tách thập phân

Doubles - Input

14.0184849945 

Doubles - Output

14.01 

Số nguyên - Input

13 

Số nguyên - Output

13 (not 13.00) 

Có cách nào để thực hiện điều này trong cùng một phiên bản DecimalFormat không? Mã của tôi là như sau, cho đến thời điểm này:

DecimalFormat df = new DecimalFormat("#,###,##0.00"); 
DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.ENGLISH); 
otherSymbols.setDecimalSeparator('.'); 
otherSymbols.setGroupingSeparator(','); 
df.setDecimalFormatSymbols(otherSymbols); 
+4

Tại sao nó phải là như nhau 'DecimalFormat' instance? Có gì sai khi có 2 trường hợp 'DecimalFormat', một để giữ hai chữ số qua dấu thập phân và một không có bất kỳ chữ số nào vượt quá dấu thập phân? – rgettman

+0

Bởi vì các số mà chương trình định dạng mỗi lần là số nguyên hoặc số nguyên, mà không biết loại trước khi hình thành. Vì vậy, tôi muốn cùng một ví dụ mà sẽ "hiểu" cho dù một số là hai lần để cắt thêm dấu thập phân hoặc nó là một số nguyên - để giữ cho nó không bị ảnh hưởng. – Lefteris008

Trả lời

26

Bạn chỉ có thể đặt minimumFractionDigits tới 0. Như thế này:

public class Test { 

    public static void main(String[] args) { 
     System.out.println(format(14.0184849945)); // prints '14.01' 
     System.out.println(format(13)); // prints '13' 
     System.out.println(format(3.5)); // prints '3.5' 
     System.out.println(format(3.138136)); // prints '3.13' 
    } 

    public static String format(Number n) { 
     NumberFormat format = DecimalFormat.getInstance(); 
     format.setRoundingMode(RoundingMode.FLOOR); 
     format.setMinimumFractionDigits(0); 
     format.setMaximumFractionDigits(2); 
     return format.format(n); 
    } 

} 
+0

Cảm ơn, đã giải quyết được vấn đề! :) – Lefteris008

+0

hiện có định dạng 44.0 đến 44 và 55.60 đến 55.6. Làm cách nào để giữ số 0 ở cuối bằng định dạng? – user1510006

3

Bạn không thể chỉ gói này vào cuộc gọi Tiện ích. Ví dụ

public class MyFormatter { 

    private static DecimalFormat df; 
    static { 
    df = new DecimalFormat("#,###,##0.00"); 
    DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(Locale.ENGLISH); 
    otherSymbols.setDecimalSeparator('.'); 
    otherSymbols.setGroupingSeparator(','); 
    df.setDecimalFormatSymbols(otherSymbols); 
    } 

    public static <T extends Number> String format(T number) { 
    if (Integer.isAssignableFrom(number.getClass()) 
     return number.toString(); 

    return df.format(number); 
    } 
} 

Bạn có thể sau đó chỉ cần làm những việc như: MyFormatter.format(int), vv

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