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

problema restar dos double

Estas en el tema de problema restar dos double en el foro de Java en Foros del Web. hola tengo una operacion que simplemente hace una resta, todas las variables se declaran de tipo double. ValorJ=4.0 y mediaJ=2.2 pues bien al restar en ...
  #1 (permalink)  
Antiguo 15/03/2010, 16:29
 
Fecha de Ingreso: febrero-2009
Mensajes: 60
Antigüedad: 15 años, 1 mes
Puntos: 0
problema restar dos double

hola tengo una operacion que simplemente hace una resta, todas las variables se declaran de tipo double. ValorJ=4.0 y mediaJ=2.2 pues bien al restar en lugar de almacenar en parJ=1,8 se almacena 1,79999999999 alguien me puede decir que puedo hacer para que se almacene 1.8?

Cita:
parJ=valorJ-mediaJ;
  #2 (permalink)  
Antiguo 15/03/2010, 21:27
 
Fecha de Ingreso: agosto-2009
Ubicación: Cartagena, Colombia
Mensajes: 516
Antigüedad: 14 años, 7 meses
Puntos: 13
Respuesta: problema restar dos double

Usa esto:

Código JAVA:
Ver original
  1. DecimalFormat df = new DecimalFormat("#.##");
  2. double x=4.0, y=2.2;
  3. System.out.println(df.format(x-y));

Saluos..
__________________
Un camino de mil millas comienza por el primer paso. Lao Tse
  #3 (permalink)  
Antiguo 16/03/2010, 05:07
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: problema restar dos double

Cita:
Iniciado por Soynueva Ver Mensaje
al restar en lugar de almacenar en parJ=1,8 se almacena 1,79999999999 alguien me puede decir que puedo hacer para que se almacene 1.8?
Wenas

OJO. SIEMPRE se almacenara 1.7999999... en tu caso. Otra cosa es el FORMATO en que tu quieras sacarlo por pantalla, como bien te ha puesto mhax.

Por ejemplo, si tu dices
Código:
System.out.println(new java.util.Date());
Te mostrara la fecha actual, entendiendo como fecha actual la fecha y la hora (minuto y segundo) cuando ejecutaste la orden.

Si quieres sacar solo la fecha tendrias que formatearlo, por ejemplo con SimpleDateFormat.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #4 (permalink)  
Antiguo 16/03/2010, 07:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: problema restar dos double

Si quieres precisión, hay que usar BigDecimal. Los tipos primitivos y sus wrapper, como en la mayoría de lenguajes, son de precisión limitada por razones de rendimiento..

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 16/03/2010, 07:05
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: problema restar dos double

Creo que su problema no es tener 'poca precision'

Es, mas bien, tener demasiada.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #6 (permalink)  
Antiguo 16/03/2010, 08:02
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: problema restar dos double

El problema es que 4.0 - 2.2 no da 1.8 si no que da 1.79999999... y eso es un problema de precisión de los double.

Mostrarlo por pantalla redondeando sólo "maquilla" el problema, que es que la resta no es correcta con la precisión deseada.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #7 (permalink)  
Antiguo 16/03/2010, 10:13
Avatar de elAntonie  
Fecha de Ingreso: febrero-2007
Mensajes: 894
Antigüedad: 17 años, 2 meses
Puntos: 10
Respuesta: problema restar dos double

Mira, ahi tienes razon.

Saludos.
__________________
--
NO. Tu problema no es urgente.

CCFVLS
  #8 (permalink)  
Antiguo 16/03/2010, 12:11
 
Fecha de Ingreso: febrero-2009
Mensajes: 60
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: problema restar dos double

el problema es para algunos números para otros no, he buscado por internet y dice que hay algunos números que no se pueden almacenar y entonces pone la aproximación la verdad es que no entiendo cual es el problema pero por lo visto es de java y del tipo de compilador que tengas. No se como solucionarlo si alguien sabe algo, pk con redondeo o formato no se soluciona el problema.
  #9 (permalink)  
Antiguo 16/03/2010, 12:37
 
Fecha de Ingreso: febrero-2009
Mensajes: 60
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: problema restar dos double

copio literalmente lo leido:

Cita:
Esta peculiaridad en el uso de números de coma flotante viene directamente del uso de los números en el procesador, con lo que cada lenguaje puede aportar o no aportar una solución.

Este error en la representación de los números decimales se refiere a que algunas fracciones decimales no se pueden representar exactamente como fracciones binarias (de base 2). Ésta es la principal razón de que Python, Perl, C, C++, Java, Fortran y muchos otros no suelan presentar el número decimal exacto.
otra pagina con información sobre esto:

http://support.microsoft.com/kb/125056/es
  #10 (permalink)  
Antiguo 16/03/2010, 14:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Respuesta: problema restar dos double

El "problema" en concreto es laargo de explicar, pero básicamente es que los tipos primitivos pueden almacenar un numero de digitos finito y los numeros de coma flotante pueden tener un número de digitos infinito, así que al representar algunos numeros se pierde, especialmente al realizar operaciones, aunque parezcan simples. Es cuestión de la aritmética con números de punto/coma flotante.

La solución en Java, como ya te he dicho, es usar BigDecimal, que tiene precisión "infinita".

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #11 (permalink)  
Antiguo 17/03/2010, 19:24
Avatar de dackiller  
Fecha de Ingreso: septiembre-2003
Ubicación: The Matrix
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: problema restar dos double

Todo depende, que quieres representar con esos datos.

Si es una función matematica que requiera mucha exactitud podrás usar lo que el compañero GreenEyed sugiere, pero estoy deacuerdo con elAntonie probablemente no necesites tanta presición...


Esto podría resolver tu problema si tus calculos no necesitan tanta presicion...


http://java.sun.com/j2se/1.4.2/docs/...berFormat.html

Saludos...
__________________
--
NOTA: Si haz conseguido la solución a tu problema, por favor edita el titulo del tema colocando el prefijo [SOLUCIONADO], para que otros usuarios puedan encontrar soluciones más rápido.

Etiquetas: dos, double, restar
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 09:52.