2009-08-20 13 views
9

Come evitare che l'arrotondamento (arrotondamento dell'algoritmo semitondo) non venga arrotondato allo String.format("%.2f", doubleValue);?Prevenire lo arrotondamento in String.format ("%. 2f", doubleValue) in Java

ad es.

doubleValue = 123.459 

dopo la formattazione,

doubleValue = 123.46 

Voglio solo scartare l'ultima cifra,

123.45 

So che ci sono altri modi per fare questo, voglio solo sapere se questo è possibile usare lo String.format.

risposta

12

è sempre possibile impostare la modalità di arrotondamento:

http://java.sun.com/javase/6/docs/api/java/math/RoundingMode.html

e quindi utilizzare String.Format() HALF_EVEN viene utilizzato per impostazione predefinita, ma è possibile modificarlo al soffitto

un altro approccio non flessibile sarà (ma questo non è quello che hai chiesto):

DecimalFormat df = new DecimalFormat("###.##"); 
df.format(123.459); 
+0

Cosa si deve fare se le cifre a sinistra del punto decimale possono essere più di 3 cifre? Inoltre, è possibile utilizzarlo direttamente su una doppia variabile che lo convertirà in una stringa, invece di creare un nuovo oggetto? –

+1

Riferimento futuro, questo è sbagliato. Se i decimali decimali sono inferiori a 6, viene utilizzato il mezzo arrotondato, viene utilizzato un altro arrotondamento HALF_EVEN saggio. Lo trovo assurdo! – Chad

3
doubleValue = 123.459 
doubleValue = Math.ceil(doubleValue*100)/100; 
+3

Se si desidera troncare, non si desidera utilizzare 'floor' per i valori positivi, e' ceil' per quelle negative ? – Rob

5

Sembra che la risposta sia un grosso NO grasso. http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec "allora il valore sarà arrotondato utilizzando l'algoritmo round metà up"

Trovo strano che avrebbero fatto che, dal momento NumberFormatter consente di impostare RoundingMode. Ma come dici tu, ci sono altri modi per farlo. Ovviamente, la cosa più semplice è sottrarre .005 dal tuo valore.

+1

Questa dovrebbe essere la risposta accettata. La risposta di @ DimitryK implica che è possibile ottenere String.format() per troncare invece di round, il che non è vero. – Aranda

-1

uso String.Format ("% 2f.", DoubleValue - .005)

+4

Stai attento con questo approccio! 'String.format ("%. 2f ", 1.05 - .005)' risulta in '1.04', presumibilmente a causa di inaccuratezze in virgola mobile. – Aranda