2013-04-30 11 views
13

Próbuję sformatować niektóre liczby w programie Java. Liczby będą zarówno podwójne, jak i całkowite. Podczas obsługi podwajania, chcę zachować tylko dwie cyfry po przecinku, ale podczas obsługi liczb całkowitych chcę, aby program nie wpływał na nie. Innymi słowy:Java: Użyj formatu DecimalFormat do formatowania liczb podwójnych i całkowitych, ale zachowaj liczby całkowite bez separatora dziesiętnego.

Doubles - Wejście

14.0184849945 

Doubles - Wyjście

14.01 

Integers - Wejście

13 

Integers - Wyjście

13 (not 13.00) 

Czy istnieje sposób wdrożenia tego w samej instancji DecimalFormat? Mój kod jest następujący, jak na razie:

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

Dlaczego to musi być takie same Instancja "DecimalFormat"? Co jest nie tak z posiadaniem 2 wystąpień "DecimalFormat", jeden, aby zachować dwie cyfry za przecinkiem dziesiętnym, a jeden nie ma żadnych cyfr za przecinkiem dziesiętnym? – rgettman

+0

Ponieważ liczby, które program formatuje za każdym razem są liczbami podwójnymi lub liczbami całkowitymi, bez znajomości typu przed formacją. Tak więc chcę tego samego wystąpienia, które "zrozumie", czy liczba jest podwójna - do przycinania dodatkowych miejsc po przecinku - lub jest liczbą całkowitą - aby zachować to bez wpływu. – Lefteris008

Odpowiedz

26

można po prostu ustawić minimumFractionDigits 0. Jak to:

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

Dzięki, że rozwiązałeś problem! :) – Lefteris008

+0

teraz formatuje od 44.0 do 44 i od 55.60 do 55.6. Jak zachować zero na końcu za pomocą formatu? – user1510006

3

Nie możesz po prostu otoczyć tego w wywołaniu narzędzia. Na przykład

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); 
    } 
} 

Następnie można po prostu robić takie rzeczy jak: MyFormatter.format(int) itp

Powiązane problemy