Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 17/10/13, 22:23:18
Array

[xs_avatar]
hugomc92 hugomc92 no está en línea
Miembro del foro
 
Fecha de registro: mar 2010
Mensajes: 157
Modelo de smartphone: HTC One M8, Nexus 7(2013), HTC One, HTC One X, HD2
Tu operador: Movistar
Problema con DecimalFormat

Hola a todos, estoy usando un objeto DecimalFormat para formatear los números que voy metiendo al pulsar botones y salgan separados por comas, separados por miles. El problema aparece que solo me deja meter 15 números y después se añaden siempre 0 independientemente del numero q pulse. Me he leído toda la documentación de decimalformat y numberformat y no he encontrado nada. Por favor si alguien me puede ayudar estaría muy agradecido.
Gracias de antemano.
Saludos
Responder Con Cita


  #2  
Viejo 18/10/13, 13:19:09
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

¿El número sin formatear cómo lo guardas? ¿Tiene el valor esperado antes de formatearlo? ¿Es un long o es un int?
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #3  
Viejo 19/10/13, 08:10:02
Array

[xs_avatar]
hugomc92 hugomc92 no está en línea
Miembro del foro
 
Fecha de registro: mar 2010
Mensajes: 157
Modelo de smartphone: HTC One M8, Nexus 7(2013), HTC One, HTC One X, HD2
Tu operador: Movistar
 Cita: Originalmente Escrito por mocelet Ver Mensaje
¿El número sin formatear cómo lo guardas? ¿Tiene el valor esperado antes de formatearlo? ¿Es un long o es un int?
Es en una calculadora, entonces es un double que conforme se van pulsando botones se va multiplicando por 10 y sumando el numero pulsado y todo eso se formatea cada vez que se pulsa cualquier numero para q vaya apareciendo la separacion por miles conforme pulsas números. Pero yo diría que si, q el double se va guardando bien pero al formatearlo falla. Alguna solución?
Responder Con Cita
  #4  
Viejo 19/10/13, 12:51:23
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

 Cita: Originalmente Escrito por hugomc92 Ver Mensaje
Pero yo diría que si, q el double se va guardando bien pero al formatearlo falla. Alguna solución?
Pues no, compruébalo ;)

Has alcanzado el límite de precisión del double. El tipo double a partir de los 15-17 dígitos de precisión empieza a almacenar los valores en forma de potencias para poder representar números muy grandes sin crecer el número de bits.

Si necesitas manejar tantos dígitos en la parte entera (entiendo que no... no sé cuál será la aplicación pero seguro que son despreciables esos números) tendrías que irte a la clase BigDecimal que tiene una precisión arbitraria (no limitada) y puedes meterle el número que quieras.

Incluso las calculadoras de verdad te muestran resultados con un número finito de dígitos y luego te plantan el exponente para saber cuántos ceros hay que añadir (10 elevado a lo que sea).
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!

Última edición por mocelet Día 19/10/13 a las 14:06:26.
Responder Con Cita
Gracias de parte de:
  #5  
Viejo 19/10/13, 14:40:15
Array

[xs_avatar]
hugomc92 hugomc92 no está en línea
Miembro del foro
 
Fecha de registro: mar 2010
Mensajes: 157
Modelo de smartphone: HTC One M8, Nexus 7(2013), HTC One, HTC One X, HD2
Tu operador: Movistar
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Pues no, compruébalo ;)

Has alcanzado el límite de precisión del double. El tipo double a partir de los 15-17 dígitos de precisión empieza a almacenar los valores en forma de potencias para poder representar números muy grandes sin crecer el número de bits.

Si necesitas manejar tantos dígitos en la parte entera (entiendo que no... no sé cuál será la aplicación pero seguro que son despreciables esos números) tendrías que irte a la clase BigDecimal que tiene una precisión arbitraria (no limitada) y puedes meterle el número que quieras.

Incluso las calculadoras de verdad te muestran resultados con un número finito de dígitos y luego te plantan el exponente para saber cuántos ceros hay que añadir (10 elevado a lo que sea).
Muchas gracias, de verdad. No es que quiera manejar tantos dígitos, sino q quiero dar la elección al usuario final de q pueda poner cualquier numero (sin importar el tamaño de dicho) y pueda hacer operaciones con este, aunque como bien comentas a la hora de manejar el resultado si que lo hago con notación científica si es necesario.
Muchas gracias de nuevo, le echare un ojo a la clase BigDecimal que comentas.
Un saludo
Responder Con Cita
  #6  
Viejo 19/10/13, 14:49:37
Array

[xs_avatar]
hugomc92 hugomc92 no está en línea
Miembro del foro
 
Fecha de registro: mar 2010
Mensajes: 157
Modelo de smartphone: HTC One M8, Nexus 7(2013), HTC One, HTC One X, HD2
Tu operador: Movistar
Perdona, antes me equivoque. Pasaba el numero a double para poder formatearlo con la clase DecimalFormat y añadir así la separación de los miles en el numero. He estado mirando por encima y no he visto que algo así se pueda hacer con BigDecimal, alguna sugerencia para poder formatear el BigDecimal y que vayan apareciendo las separaciones de los números conforme se van pulsando? Muchas gracias de nuevo
Saludos
Responder Con Cita
  #7  
Viejo 19/10/13, 15:19:41
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

No estoy puesto en el DecimalFormat pero en principio le puedes pasar un BigDecimal (los métodos que aceptan un Object como argumento) y te lo formatea igualmente.

EDITO: el format de DecimalFormat dice que llama al doubleValue del objeto, en cuyo caso te va a dar igual. Pues no sé, lo mejor es que no dejes al usuario meter tantos dígitos y pases a notación científica cuando haya escrito los 15 dígitos.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!

Última edición por mocelet Día 19/10/13 a las 15:24:59.
Responder Con Cita
Gracias de parte de:
  #8  
Viejo 19/10/13, 15:31:01
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Como dice mocelet, tienes que usar el método "format" que su primer parámetro es un "Object". Ya que aunque el tipo del parámetro es "Object" realmente sólo acepta subclases de "Number" (vete a saber porque Oracle le ha puesto "Object" entonces), y "BigDecimal" es una subclase de "Number" (al igual que Byte, Double, Float, Integer, BigInteger, BigDecimal, etc, además de subclases propias que puedes hacerte)
Responder Con Cita
Gracias de parte de:
  #9  
Viejo 19/10/13, 18:04:53
Array

[xs_avatar]
hugomc92 hugomc92 no está en línea
Miembro del foro
 
Fecha de registro: mar 2010
Mensajes: 157
Modelo de smartphone: HTC One M8, Nexus 7(2013), HTC One, HTC One X, HD2
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Como dice mocelet, tienes que usar el método "format" que su primer parámetro es un "Object". Ya que aunque el tipo del parámetro es "Object" realmente sólo acepta subclases de "Number" (vete a saber porque Oracle le ha puesto "Object" entonces), y "BigDecimal" es una subclase de "Number" (al igual que Byte, Double, Float, Integer, BigInteger, BigDecimal, etc, además de subclases propias que puedes hacerte)






 Cita: Originalmente Escrito por mocelet Ver Mensaje
No estoy puesto en el DecimalFormat pero en principio le puedes pasar un BigDecimal (los métodos que aceptan un Object como argumento) y te lo formatea igualmente.

EDITO: el format de DecimalFormat dice que llama al doubleValue del objeto, en cuyo caso te va a dar igual. Pues no sé, lo mejor es que no dejes al usuario meter tantos dígitos y pases a notación científica cuando haya escrito los 15 dígitos.
Si probé con el format pero como bien dices mocelet, pasa exactamente lo mismo al llamar al doubleValue del BigDecimal. Seguiré investigando para ver como lo puedo hacer ya que lo de que se pase a notación científica no lo veo al ser una calculadora simple.
Muchas gracias por vuestra ayuda. si se os ocurre alguna otra forma de hacerlo por favor me gustaría solucionarlo. Si yo lo consiguiera hacer lo postearé.
Un saludo
Responder Con Cita
  #10  
Viejo 19/10/13, 18:44:07
Array

[xs_avatar]
mocelet mocelet no está en línea
Desarrollador
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -

Se veía venir con lo que decía el API, pues me da que vas a tardar menos añadiendo las comas o los puntos a mano (eso sí, consulta el DecimalFormatSymbols para saber cuál es el separador para agrupar los millares - getGroupingSeparator() y el de los decimales getDecimalSeparator()).
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
Responder Con Cita
  #11  
Viejo 19/10/13, 20:35:48
Array

[xs_avatar]
hugomc92 hugomc92 no está en línea
Miembro del foro
 
Fecha de registro: mar 2010
Mensajes: 157
Modelo de smartphone: HTC One M8, Nexus 7(2013), HTC One, HTC One X, HD2
Tu operador: Movistar
 Cita: Originalmente Escrito por mocelet Ver Mensaje
Se veía venir con lo que decía el API, pues me da que vas a tardar menos añadiendo las comas o los puntos a mano (eso sí, consulta el DecimalFormatSymbols para saber cuál es el separador para agrupar los millares - getGroupingSeparator() y el de los decimales getDecimalSeparator()).
Pues si, la verdad es que es la opción que estoy pensando en hacer.
Muchas gracias por todo
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android

Herramientas


Hora actual: 23:54:42 (GMT +2)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /