2009-11-16 20 views
26

I DecimalFormat zu Format bin verdoppelt auf 2 Dezimalstellen wie folgt aus:anzeigen padding Nullen mit DecimalFormat

DecimalFormat dec = new DecimalFormat("#.##"); 
double rawPercent = ((double)(count.getCount().intValue())/
          (double)(total.intValue())) * 100.00; 
double percentage = Double.valueOf(dec.format(rawPercent)); 

Es funktioniert, aber wenn ich eine Zahl wie 20 haben, es gibt mir diese:

diese
20.0 

und ich will:

20.00 

Irgendwelche Vorschläge?

Antwort

31

Die DecimalFormat-Klasse dient zur Umwandlung eines dezimalen numerischen Werts in einen String. In Ihrem Beispiel nehmen Sie den String, der von der format() -Methode kommt, und setzen ihn in eine doppelte Variable zurück. Wenn Sie dann diese doppelte Variable ausgeben, würden Sie die formatierte Zeichenfolge nicht sehen. Sehen Sie das Codebeispiel unten und seine Ausgabe:

int count = 10; 
int total = 20; 
DecimalFormat dec = new DecimalFormat("#.00"); 
double rawPercent = ((double)(count)/(double)(total)) * 100.00; 

double percentage = Double.valueOf(dec.format(rawPercent)); 

System.out.println("DF Version: " + dec.format(rawPercent)); 
System.out.println("double version: " + percentage); 

Welche Ausgänge:

"DF Version: 50.00" 
"double version: 50.0" 
+0

danke - das macht Sinn, und jetzt funktioniert es perfekt – mportiz08

7

Verwenden Sie das Format "# .00".

+0

, die funktioniert auch nicht – mportiz08

+0

Sie haben nicht gezeigt, uns Ihre print-Anweisung. Wenn Sie dec.format (Prozent) verwenden, funktioniert das Format. –

+0

Es ist besser, "0.00" zu verwenden, da "# .00" 0 als .00 formatiert, was meiner Meinung nach nicht gut aussieht. – ka3ak

0

Versuchen Sie stattdessen eine Dezimalformat von "0.00". Gemäß der JavaDocs wird dies die zusätzlichen 0 nicht entfernen.

+0

es ist immer noch eine extra Null mit dem "0.00" -Format abstreifen :( – mportiz08

5

Sie können versuchen, so etwas wie:

DecimalFormat df = new DecimalFormat("0.000000"); 
df.setMinimumFractionDigits(0); 
df.setMinimumIntegerDigits(2); 

Auf diese Weise können die Mindestanzahl der Stellen gewährleisten kann, bevor oder nach dem Komma

+0

Das funktioniert nicht. –

+0

'df.setMinimumFractionDigits (2);' arbeitete für mich. –

2

Versuchen Sie diesen Code:

int count = 10; 
int total = 20; 
int another=0; 
DecimalFormat df = new DecimalFormat("0.00"); 

System.out.println(df.format(count)); 
System.out.println(df.format(total)); 
System.out.println(df.format(another)); 

Die Ausgabe lautet: 10,00 20,00 0,00

13

diesen Code Versuchen:

BigDecimal decimal = new BigDecimal("100.25"); 

BigDecimal decimal2 = new BigDecimal("1000.70"); 

BigDecimal decimal3 = new BigDecimal("10000.00"); 

DecimalFormat format = new DecimalFormat("###,###,###,###,###.##"); 

format.setDecimalSeparatorAlwaysShown(true); 

format.setMinimumFractionDigits(2); 

System.out.println(format.format(decimal)); 

System.out.println(format.format(decimal2)); 

System.out.println(format.format(decimal3)); 

Ergebnis:

100.25 

1,000.70 

10,000.00 
+0

Wie fügt sich Ihre Antwort zu der Frage? Die Frage wurde vor 4 Jahren beantwortet und offenbar zur Zufriedenheit des OP. Außerdem: Verwenden Sie bitte die bereitgestellten Formatierungsmöglichkeiten, um Ihren Code zu formatieren. –

+0

das ist die richtige Antwort – MobileMon

+0

Diese Antwort half mir, als ich 'format.setMinimumFractionDigits()' verwendet. Obwohl es nicht der Fall des OP war, musste ich in meinem Fall die Anzahl der Dezimalstellen in Abhängigkeit von anderen Faktoren ändern, so dass ich ein einziges Gesamtmuster beibehalten konnte, aber die Anzahl der Dezimalstellen variierte. – Fodder

2

ich mein kleines Testprogramm nützlich und wollen gefunden teile es mit dir. Genießen.

package be.softwarelab.numbers; 

import java.text.DecimalFormat; 
import java.text.DecimalFormatSymbols; 
import java.util.Locale; 

public class DecimalNumbers { 

    private static final double ZERO = 0; 
    private static final double TEN = 10.0; 
    private static final double PI = Math.PI;       // 3.141592653589793; 
    private static final double MILLIONS = Math.E * Math.pow(10, 6); // 2718281.828459045; 
    private static final double NINERS = 9999999.99999; 

    public static void main(String[] args) { 

     String format01 = "#.#"; 
     String format02 = "0.#"; 
     String format03 = "#.0"; 
     String format04 = "0.0"; 
     String format05 = "##.#"; 
     String format06 = "00.#"; 

     String formatAll = "###,###.###"; 
     String formatLong = "#.#########"; 

     System.out.println("====== ZERO ================================================="); 
     showResult(ZERO, format01, Locale.US); 
     showResult(ZERO, format02, Locale.US); 
     showResult(ZERO, format03, Locale.US); 
     showResult(ZERO, format04, Locale.US); 
     showResult(ZERO, format05, Locale.US); 
     showResult(ZERO, format06, Locale.US); 
     System.out.println("====== TEN ================================================="); 
     showResult(TEN, format01, Locale.US); 
     showResult(TEN, format02, Locale.US); 
     showResult(TEN, format03, Locale.US); 
     showResult(TEN, format04, Locale.US); 
     showResult(TEN, format05, Locale.US); 
     showResult(TEN, format06, Locale.US); 
     System.out.println("====== PI ================================================="); 
     showResult(PI, format01, Locale.US); 
     showResult(PI, format02, Locale.US); 
     showResult(PI, format03, Locale.US); 
     showResult(PI, format04, Locale.US); 
     showResult(PI, format05, Locale.US); 
     showResult(PI, format06, Locale.US); 
     System.out.println("====== MILLIONS ============================================="); 
     showResult(MILLIONS, formatAll, Locale.US); 
     showResult(MILLIONS, formatAll, Locale.GERMANY); 
     showResult(MILLIONS, formatAll, Locale.FRANCE); 
     showResult(MILLIONS, formatAll, new Locale("nl", "BE")); 
     System.out.println("====== NINERS ============================================="); 
     showResult(NINERS, format01, Locale.US); 
     showResult(NINERS, format02, Locale.US); 
     showResult(NINERS, format03, Locale.US); 
     showResult(NINERS, format04, Locale.US); 
     showResult(NINERS, format05, Locale.US); 
     showResult(NINERS, format06, Locale.US); 
     showResult(NINERS, formatLong, Locale.US); 
     System.out.println("============================================================="); 
    } 

    public static void showResult(double number, String format, Locale locale) { 
     // Using a Locale to see the differences between regions. 
     DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(locale); 
     DecimalFormat formatter = new DecimalFormat (format, otherSymbols); 

     // Create the String result 
     String output = formatter.format(number); 

     // Format the output for a nice presentation. 
     System.out.format(" %s %20s %11s = %20s\n", locale, number, format, output); 
    } 
} 

Daraus ergibt sich:

====== ZERO ================================================= 
en_US     0.0   #.# =     0 
en_US     0.0   0.# =     0 
en_US     0.0   #.0 =     .0 
en_US     0.0   0.0 =     0.0 
en_US     0.0  ##.# =     0 
en_US     0.0  00.# =     00 
====== TEN ================================================= 
en_US     10.0   #.# =     10 
en_US     10.0   0.# =     10 
en_US     10.0   #.0 =     10.0 
en_US     10.0   0.0 =     10.0 
en_US     10.0  ##.# =     10 
en_US     10.0  00.# =     10 
====== PI ================================================= 
en_US 3.141592653589793   #.# =     3.1 
en_US 3.141592653589793   0.# =     3.1 
en_US 3.141592653589793   #.0 =     3.1 
en_US 3.141592653589793   0.0 =     3.1 
en_US 3.141592653589793  ##.# =     3.1 
en_US 3.141592653589793  00.# =     03.1 
====== MILLIONS ============================================= 
en_US 2718281.828459045 ###,###.### =  2,718,281.828 
de_DE 2718281.828459045 ###,###.### =  2.718.281,828 
fr_FR 2718281.828459045 ###,###.### =  2 718 281,828 
nl_BE 2718281.828459045 ###,###.### =  2.718.281,828 
====== NINERS ============================================= 
en_US  9999999.99999   #.# =    10000000 
en_US  9999999.99999   0.# =    10000000 
en_US  9999999.99999   #.0 =   10000000.0 
en_US  9999999.99999   0.0 =   10000000.0 
en_US  9999999.99999  ##.# =    10000000 
en_US  9999999.99999  00.# =    10000000 
en_US  9999999.99999 #.######### =  9999999.99999 
============================================================= 
Verwandte Themen