2013-06-12 42 views
20

Io uso i valori doppi nel mio progetto e vorrei mostrare sempre le prime due cifre decimali, anche se sono zeri. Io uso questa funzione per arrotondare e se il valore che stampo è 3.47233322 (correttamente) stampa 3.47. Ma quando stampo, ad esempio, il valore 2 stampa 2.0.Java: double: come mostrare SEMPRE due cifre decimali

public static double round(double d) { 
    BigDecimal bd = new BigDecimal(d); 
    bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
    return bd.doubleValue(); 
} 

Voglio stampare 2.00!

C'è un modo per farlo senza utilizzare le stringhe?

Grazie!

EDIT: dalle vostre risposte (di cui vi ringrazio) Capisco che non ero chiaro nel dire quello che sto cercando (e mi dispiace per questo): so come stampare due cifre dopo il numero usando le soluzioni che hai proposto ... quello che voglio è memorizzare nel doppio valore direttamente le due cifre! In modo che quando faccio qualcosa di simile a questo System.out.println("" + d) (dove d è il mio doppio con valore 2) stampa 2.00.

Sto iniziando a pensare che non c'è modo di farlo ... giusto? Grazie ancora per le tue risposte, per favore fatemi sapere se conoscete una soluzione!

+3

Non credo che è possibile modificare i negozi di via java valori doppi. È possibile modificare solo il modo in cui sono formattati quando presentati. –

+0

Sì ... penso che tu abbia ragione ... Dovrò formattare i miei valori ogni volta che li mostrerò all'utente ... MOLTE volte! La ringrazio per la risposta! – aveschini

+0

Bene, basta scrivere il metodo di formattazione una sola volta, non mi preoccuperei di ciò. ;) –

risposta

41

si può usare qualcosa di simile:

double d = 1.234567; 
DecimalFormat df = new DecimalFormat("#.00"); 
System.out.print(df.format(d)); 

A cura di rispondere in realtà la domanda, perché mi serviva la risposta reale e questo è venuta su google e qualcuno lo ha contrassegnato come la risposta nonostante il fatto che non avrebbe funzionato quando i decimali erano 0.

+0

Ho modificato la mia domanda per chiarire cosa sto cercando. Grazie lo stesso! – aveschini

+1

Ho trovato che il codice in virgolette mostra '.30' se il numero dato è' 0.3', quindi ho usato il pattern '# 0.00' e questo ha funzionato fino ad ora –

+0

Per me, questa risposta in realtà non funziona. Ecco cosa ottengo: '13310.0 13676.31 26600.2' – wintermute

17

Utilizzare la java.text.NumberFormat per questo:

NumberFormat nf= NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(2); 
nf.setMinimumFractionDigits(2); 
nf.setRoundingMode(RoundingMode.HALF_UP); 

System.out.print(nf.format(decimalNumber)); 
+0

Ho modificato la mia domanda per chiarire cosa sto cercando. Grazie lo stesso! – aveschini

+0

Ho aggiunto la risposta. – darijan

+0

Funziona per ottenere xxx.00 – Dexter

3

DecimalFormat è l'opzione più semplice da usare:

double roundTwoDecimals(double d) { 
     DecimalFormat twoDecimals = new DecimalFormat("#.##"); 
     return Double.valueOf(twoDecimals.format(d)); 
} 

Spero che questo risolve il problema ...

+0

Ho provato la tua soluzione adesso ... non funziona. Metto 3 e stampa 3.0. – aveschini

+0

Il mio male. Ero troppo veloce e non ho letto SEMPRE. Prova a cambiare DecimalFormat in "##. 00". Questo risolverà il tuo problema! –

7

si può semplicemente fare questo:

double d = yourDoubleValue; 
String formattedData = String.format("%.02f", d); 
+0

Questa è la risposta per chi non vuole arrotondare il numero in alcun modo. – Siavas

+0

Voglio memorizzare il valore nel doppio stesso dopo il round –

0
java.text.DecimalFormat df = new java.text.DecimalFormat("###,###.##"); 
df.setMaximumFractionDigits(2); 
df.setMinimumFractionDigits(2); 
+0

Un po 'di spiegazione con il tuo codice sarebbe bello. – Sakuto

0

Si può usare qualcosa di simile:

Se si desidera mantenere 0 anche nella risposta: quindi utilizzare (0.00) nella stringa di formato

double d = 2.46327; 
DecimalFormat df = new DecimalFormat("0.00"); 
System.out.print(df.format(d)); 

L'output: 2,46

double d = 0.0001; 
DecimalFormat df = new DecimalFormat("0.00"); 
System.out.print(df.format(d)); 

L'output: 0.00

Tuttavia, se si utilizza DecimalFormat df = new DecimalFormat (" 0 ##. ");

double d = 2.46327; 
DecimalFormat df = new DecimalFormat("0.##"); 
System.out.print(df.format(d)); 

Uscita: 2.46

double d = 0.0001; 
DecimalFormat df = new DecimalFormat("0.##"); 
System.out.print(df.format(d)); 

L'output: 0

Problemi correlati