2012-01-11 14 views
237

Eventuali duplicati:
Round a double to 2 significant figures after decimal pointIl modo migliore per formattare un valore Double per 2 Decimale pone

ho a che fare con molti valori doppi nella mia richiesta, è che non c'è un modo semplice gestire la formattazione dei valori decimali in Java?

C'è un altro modo migliore di farlo che

DecimalFormat df = new DecimalFormat("#.##"); 

Quello che voglio fare è fondamentalmente formato valori doppi come

23.59004 to 23.59 

35.7 to 35.70 

3.0 to 3.00 

9 to 9.00 
+1

più semplice di una riga aggiuntiva? Sono abbastanza sicuro che questo è il modo più semplice e chiaro per formattare un decimale. Tieni presente che se questo programma verrà utilizzato da persone di diverse località, DecimalFormat utilizzerà un ',' o '.' come appropriato per il separatore decimale. Ciò ha causato alcuni problemi in un progetto su cui stavo lavorando di recente: scrivere in una casella di testo e leggerne il valore sbagliato. – Dogmatixed

+1

Questo è ciò che mi preoccupa molto, ho letto DecimalFormat come impostazione predefinita. Per favore, dimmi come si lavora con la localizzazione? –

+0

Ho usato JFormattedTextFields per l'input, popolandoli usando setValue() e leggendo da essi usando getValue(). Per i luoghi in cui è richiesto un decimale, ho utilizzato l'oggetto DecimalFormatSymbols. – Dogmatixed

risposta

380

No, non c'è modo migliore.

In realtà si ha un errore nel modello. Quello che vuoi è:

DecimalFormat df = new DecimalFormat("#.00"); 

Annotare il "00", che significa esattamente due cifre decimali.

Se si utilizza "#.##" (# significa cifre "facoltativo"), lascerà cadere zeri finali - cioè new DecimalFormat("#.##").format(3.0d); stampe solo "3", non "3.00".

+0

In realtà, la formattazione 3.0 con #. ## print 3. –

+0

che cosa circa 0,99 convertirà in .99 o 0.99? –

+15

@MubasharAhmad '" .99 "' - il '#' significa "zeri opzionali". Se si desidera preservare lo zero iniziale (ad esempio output '" 0.99 "') utilizzare il modello '" # 0.00 "' – Bohemian

294

Un'alternativa è quella di utilizzare String.format:

double[] arr = { 23.59004, 
    35.7, 
    3.0, 
    9 
}; 

for (double dub : arr) { 
    System.out.println(String.format("%.2f", dub)); 
} 

uscita:

23.59 
35.70 
3.00 
9.00 

Si potrebbe anche usare System.out.format (stessa firma del metodo), o creare un java.util.Formatter che funziona allo stesso modo.

Problemi correlati