Java - Conversion de formatos

   
Vista:

Conversion de formatos

Publicado por devc (1 intervención) el 01/04/2009 17:36:42
Hola!
Soy nuevo en el foro.
Hace un par de días que me tiene mal el formateo de numeros.
Estoy usando la clase DecimalFormat y NumberFormat, y no logro lo que necesito.
Su`pongamos un ejemplo, tengo el número: 291109.59375 y lo quiero pasar a float para que me devuelva 291109.6 por lo tanto lo fuerzo con
<(float) numero> lo cual logro que convierte a 291109.6 entonces si uso la clase

NumberFormat formatter = new DecimalFormat("###,###,##0.00");

me debería devolver 291,109.60 pero me sigue devolviendo 291,109.59

Entonces para asegurarme que realmente tengo un 291109.6 lo que hice fue pasarlo a un String y volver a convertirlo a float con Float.parseFloat, pero lo mismo, cuando lo intento formatear al resultado de traerlo de un String, me vuelve a poner el 291,109.59 al final.
Algún consejo? Aca les dejo el codigo de lo que hice.
Gracias


import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Decimal {

public static void main(String[] args) {

NumberFormat formatter = new DecimalFormat("###,###,##0.00");


double num = 291109.59375;
// double num = 291109.6;
String strNum;
float volverNum;

strNum = String.valueOf( (float)num );
volverNum = Float.parseFloat( strNum );

// volverNum = Float.parseFloat( strAux );


System.out.println("1 Numero double como viene -> " + num );
System.out.println("2 Numero double formateado -> " + formatter.format( num ));
System.out.println("3 num pasado a cadena ------> " + strNum );
System.out.println("4 num de cadena a float ----> " + formatter.format( volverNum ));
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Conversion de formatos

Publicado por YamilBracho (2072 intervenciones) el 01/04/2009 19:40:24
.59375 no es redondeado .60 porque el tercer decimal (3) no es mayor o igual a 5. Cuando ocurre ese caso el formatter si redondea al siguinete numero superior.
Prueba con 291109.59575 y veras la diferencia....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar