2009-08-20 41 views
9

¿Cómo impido que String.format("%.2f", doubleValue); se redondee (algoritmo de redondeo a la mitad) en lugar de simplemente truncarlo?Evitar el redondeo en String.format ("% .2f", doubleValue) en Java

p. Ej.

doubleValue = 123.459 

después de formatear,

doubleValue = 123.46 

sólo quiero descartar el último dígito,

123.45 

Sé que hay otras maneras de hacer esto, sólo quiero saber si esto es posible usando String.format.

Respuesta

12

siempre se puede establecer el modo de redondeo:

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

y luego usar String.Format() HALF_EVEN se utiliza de forma predeterminada, pero se puede cambiar a techo

otro enfoque no tan flexible será (pero esto no es lo que preguntaste):

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

¿Qué debe hacer si los dígitos a la izquierda del punto decimal pueden tener más de 3 dígitos? Además, ¿es posible usarlo directamente en una variable doble que lo convertirá en una cadena, en lugar de crear un nuevo objeto? –

+1

Referencia futura esto es incorrecto. Si los grados decretos están por debajo de 6, entonces se usa la mitad redondeada hacia arriba, de lo contrario se usa el redondeo HALF_EVEN. ¡Me parece absurdo! – Chad

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

Si desea truncar, no desea utilizar 'floor' para valores positivos, y' ceil' de los negativos ? – Rob

5

Parece que la respuesta es un gran NO. http://java.sun.com/javase/6/docs/api/java/util/Formatter.html#dndec "entonces el valor se redondea utilizando el algoritmo de media caña hacia arriba"

Me parece extraño que harían que, desde NumberFormatter le permite establecer RoundingMode. Pero como dices, hay otras maneras de hacerlo. Obviamente, lo más fácil es restar .005 de su valor primero.

+1

Esta debería ser la respuesta aceptada. La respuesta de @DimitryK implica que puede obtener String.format() para truncar en lugar de round, lo que no es cierto. – Aranda

-1

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

+4

¡Tenga cuidado con este enfoque !. 'String.format ("% .2f ", 1.05 - .005)' da como resultado '1.04', presumiblemente debido a imprecisiones de coma flotante. – Aranda