2011-06-22 12 views
13

Aquí es pequeño código para ilustrar lo que estoy viendoDecimalFormat redondeo

float floater = 59.999f; 

DecimalFormat df = new DecimalFormat("00.0"); 

System.out.println(df.format(floater)); 

Esta impresora:

60.0 

me gustaría que imprima

59.9 

¿Qué necesito para ¿hacer?

+0

Tome un vistazo a 'Math.round'. –

Respuesta

21

añadir esta línea antes de utilizar el DecimalFormat:

df.setRoundingMode(RoundingMode.DOWN); 

Tome un vistazo a los otros modos de redondeo y ver cuál es el mejor para usted.

Nota: este método sólo funciona en el JDK 1.6 o superior

+0

[DecimalFormat.setRoundingMode (java.math.RoundingMode)] (http://docs.oracle.com/javase/7) /docs/api/java/text/DecimalFormat.html#setRoundingMode(java.math.RoundingMode)) – Julien

1
float d = 59.999f; 
BigDecimal bd = new BigDecimal(d); 
// Use the returned value from setScale, as it doesn't modify the caller. 
bd = bd.setScale(1, BigDecimal.ROUND_FLOOR); 
String formatted = bd.toString(); 
+0

Generalmente es una mala decisión porque cambia los datos, mientras que todo lo que necesitamos cambiar es ver –

+1

@ om-nom-nom: Prefiero decir que esto es terriblemente lento. Y requiere crear un BigDecimal. Pero en cuanto a cómo "cambia los datos", no veo ... El flotador original está intacto, listo para ser utilizado por cualquier cosa. ¿Podrías elaborar más sobre tu comentario? – ppeterka

+0

@ppeterka fair point. Ha sido un poco menos que hace un año, probablemente estaba pensando desde * cómo redondeo mi punto de vista bigdecimal *, no puedo decir ahora –