2015-05-26 15 views
5
double number = Scanner.nextDouble();  
DecimalFormat df = new DecimalFormat("#.#"); 
     System.out.print (df.format(number)); 

Ho provato quanto sopra per arrotondare il mio numero a 1 cifra, ma nei casi in cui non ci sono i numeri decimali, sembra per arrotondare ad un valore intero (ad esempio 2,0 verrebbe visualizzato come 2). Voglio 2.0, così come qualsiasi altro numero di input da visualizzare in 1 decimale. Inoltre, quando DecimalFormat arrotonda un numero negativo a 0, lo trasforma in -0. Come posso risolvere questi problemi?Java strano arrotondamento con DecimalFormat

+0

Per '-0.0' vedere http: // StackOverflow. it/questions/11929096/negative-sign-in-case-of-zero-in-java - forse -0.01. Non sarei sorpreso se in java 8 il problema fosse risolto. –

risposta

3

Utilizzare "0.0" come stringa di formato. # indica una cifra o vuota se zero che è ciò che stai vedendo.

Per eliminare il segno, dare un'occhiata a this answer.

+1

Grazie, ora restituisce 0.0 per 0, ma ho ancora il problema che arrotonda i numeri negativi vicini a 0 a -0.0 ora:/ –

+0

Ho aggiunto un collegamento alla risposta - Spero che aiuti. –

0

Non c'è niente di strano nell'output. Il formato non è conforme alle tue esigenze.

In DecimalFormat# emetterà il carattere nella sua cifra decimale specificata solo se ha senso. Quindi 10.00 sarà semplicemente 10. Se si desidera che le posizioni decimali siano significative, è necessario utilizzare 0.

new DecimalFormat("#.0"); 

uscita di esempio per questo sarebbe:

0.11 - .1 
10.00 - 10.0 
10.4545 - 10.5 
.00 - .0 
455 - 455.0 

Se si desidera un 0 prima decimale troppo, allora si può utente #0.0