Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Problema con DecimalFormat

Estas en el tema de Problema con DecimalFormat en el foro de Java en Foros del Web. Estoy utilizando la clase DecilmalFormat para formatear mis cantidades con el siguiente formato: 9.999.999,99. Sucede que en un principio intente haciendolo solo con miles(999.999,99) de ...
  #1 (permalink)  
Antiguo 06/11/2014, 17:27
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Pregunta Problema con DecimalFormat

Estoy utilizando la clase DecilmalFormat para formatear mis cantidades con el siguiente formato: 9.999.999,99.

Sucede que en un principio intente haciendolo solo con miles(999.999,99) de la siguiente forma:
Código Java:
Ver original
  1. simbolos.setDecimalSeparator(',');
  2. simbolos.setGroupingSeparator('.');
  3. DecimalFormat formateador = new DecimalFormat("#,###.##",simbolos);

Esto me funciono perfectamente y pude formatear mis cantidades. Pero el problema surge al querer modificar mi patrón para que formatea cantidades mayores a 999.999,99.

Lo cual intento hacer de la siguiente forma:

Código Java:
Ver original
  1. simbolos.setDecimalSeparator(',');
  2. simbolos.setGroupingSeparator('.');
  3. DecimalFormat formateador = new DecimalFormat("#,###,###.##",simbolos);

Pero no me funciona. Alguien podría darme una mano, parece un problema sencillo de resolver pero vaya que me ha dado problemas.
  #2 (permalink)  
Antiguo 06/11/2014, 18:03
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Problema con DecimalFormat

El pattern no tiene por qué cambiar. Prueba con "#,###.##", verás que formatea 9999999 como "9.999.999".
El pattern "#,###.00" formatea el mismo número así: "9.999.999,00".
  #3 (permalink)  
Antiguo 06/11/2014, 18:17
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Problema con DecimalFormat

Si, en efecto formatea perfectamente hasta "9.999.999", pero hasta esa cantidad no tengo problemas. Mas sin embargo si le coloco decimales no me los muestra. He ahí el problema. Ejemplo:

Si coloco "9.999.999,99" me muestra solamente "9.999.999" y me omite los decimales. Pruebo colocando #,###.00 y me cambia cualquier decimal a "00". Ejemplo: Coloco "9.999.999.65" y me muestra "9.999.999.00"
  #4 (permalink)  
Antiguo 07/11/2014, 01:55
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con DecimalFormat

Buenas,

Cita:
Ejemplo: Coloco "9.999.999.65" y me muestra "9.999.999.00"
9.999.999.65 no es un numero si entendemos el "." como un separador de miles.

En todo caso, lo seria el 9999999.65
O si usas java 7 o superior seria mas claro poniendo 9_999_999.65

Código Java:
Ver original
  1.         simbolos.setDecimalSeparator(',');
  2.         simbolos.setGroupingSeparator('.');
  3.         DecimalFormat formateador = new DecimalFormat("#,###.00", simbolos);
  4.         System.out.println(formateador.format(9999999.65));


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 07/11/2014, 07:53
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Problema con DecimalFormat

Exacto, 9.999.999.65 no representa ningún número. Estás usando el "." como separador de miles y también como separador decimal (¿?). A ver si repasamos un poco de aritmética

Saludos.
  #6 (permalink)  
Antiguo 07/11/2014, 11:00
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Problema con DecimalFormat

Me disculpo, quise decir "9.999.999,65". Y dicha cantidad con los patrones que indique me la redondea a "10.000.000,00" como explique anteriormente. Los invito a hacer una prueba, con cantidades grandes el patrón no funciona adecuadamente.
  #7 (permalink)  
Antiguo 07/11/2014, 11:45
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: Problema con DecimalFormat

Buenas,

No lo entiendo. Como habrás podido ver si ejecutar el código que he puesto más arriba, formatea correctamente.

Puedes poner el código que estás ejecutando para poder reproducir tu caso?


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #8 (permalink)  
Antiguo 07/11/2014, 12:13
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Problema con DecimalFormat

Código Java:
Ver original
  1. if (txtAbonoCapital.getText().equals("") == false) {
  2. simbolos.setDecimalSeparator(',');
  3. simbolos.setGroupingSeparator('.');
  4. DecimalFormat formateador = new DecimalFormat("#,###.00",simbolos);
  5. String abono_capital = formateador.format(Float.parseFloat(txtAbonoCapital.getText()));
  6. txtAbonoCapital.setText(abono_capital);
  7.                                                    }

Esto dentro del evento FocusLost del JTextField txtAbonoCapital.
  #9 (permalink)  
Antiguo 07/11/2014, 18:15
Avatar de farfamorA  
Fecha de Ingreso: noviembre-2010
Ubicación: Lima
Mensajes: 136
Antigüedad: 13 años, 5 meses
Puntos: 24
Respuesta: Problema con DecimalFormat

El patrón funciona adecuadamente. Siempre. Somos nosotros los que no funcionamos adecuadamente.
El error de tu código está acá:
Código Java:
Ver original
  1. Float.parseFloat(txtAbonoCapital.getText())
¿Por qué, ánima bendita, estás utilizando la clase Float?
Te presento a una clase, se llama BigDecimal.
Por favor, investiga sobre en qué casos utilizar Float, en qué casos Double y en qué casos BigDecimal. En tu caso los decimales son importantes porque estás trabajando con dinero. ¿Cómo pues, confías en Float?

Tu código funcionará bien reemplazando lo anterior por esto:
Código Java:
Ver original
  1. new BigDecimal(txtAbonoCapital.getText())

Pero que funcione bien, no lo hace eficiente. Te aconsejo no usar el simple JTextField para trabajar con datos numéricos. Crea tu propia clase que extienda de JFormattedTextField para manejar números. Así no tendrás que hacer esas "validaciones" cada vez que crees un nuevo campo para un valor numérico.
  #10 (permalink)  
Antiguo 08/11/2014, 10:17
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Problema con DecimalFormat

Cita:
Iniciado por farfamorA Ver Mensaje
El patrón funciona adecuadamente. Siempre. Somos nosotros los que no funcionamos adecuadamente.
El error de tu código está acá:
Código Java:
Ver original
  1. Float.parseFloat(txtAbonoCapital.getText())
¿Por qué, ánima bendita, estás utilizando la clase Float?
Te presento a una clase, se llama BigDecimal.
Por favor, investiga sobre en qué casos utilizar Float, en qué casos Double y en qué casos BigDecimal. En tu caso los decimales son importantes porque estás trabajando con dinero. ¿Cómo pues, confías en Float?

Tu código funcionará bien reemplazando lo anterior por esto:
Código Java:
Ver original
  1. new BigDecimal(txtAbonoCapital.getText())

Pero que funcione bien, no lo hace eficiente. Te aconsejo no usar el simple JTextField para trabajar con datos numéricos. Crea tu propia clase que extienda de JFormattedTextField para manejar números. Así no tendrás que hacer esas "validaciones" cada vez que crees un nuevo campo para un valor numérico.
Muchísimas gracias amigo . Tomare en cuenta lo que me dices.

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:28.