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

Imprecisión de Double

Estas en el tema de Imprecisión de Double en el foro de Java en Foros del Web. Hola, resulta q este es mi problema, cuando leo un double de un area de texto y lo multiplico por otra cifra, a veces ocurre ...
  #1 (permalink)  
Antiguo 08/04/2008, 16:45
 
Fecha de Ingreso: febrero-2008
Mensajes: 7
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Imprecisión de Double

Hola, resulta q este es mi problema, cuando leo un double de un area de texto y lo multiplico por otra cifra, a veces ocurre que el numero no sale exacto como debe salir sino con infinitas cifras significativas, por ejemplo:

0.12*2.54= 3.0479999999999996

donde debería ser:

0.12*25.4=3.048

no puedo redondearlo porq ambos digitos son ingresados por el usuario y no tendria el numero de decimales para redondear.

Agradezco su ayuda.
  #2 (permalink)  
Antiguo 09/04/2008, 00:40
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Imprecisión de Double

Los tipos primitivos tienen, como en la mayoria de lenguajes, errores de precisión y no son adecuados para operaciones en las que sean necesarios calculos precisos. Para tener precision exacta, hay que usar la clase java.math.BigDecimal.

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 09/04/2008, 15:34
 
Fecha de Ingreso: febrero-2008
Mensajes: 7
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Imprecisión de Double

si.. tienes razon... ahora estoy utilizando la clase BigDecimal, y todo iba perfecto hasta q trate de multiplicar 2 BigDecimal y pasarlo a double y volvio a ocurrir lo mismo.. . esta es la operacion:

datoDouble=(new BigDecimal(datoDouble]).multiply (new BigDecimal(25.4))).doubleValue();

y me arroja otra vez un numero impreciso
  #4 (permalink)  
Antiguo 01/04/2011, 08:52
 
Fecha de Ingreso: noviembre-2010
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Imprecisión de Double

Buu, que maldita chafez! y ahora que haremos estupido java no sabe hacer las malditas y simples sumas que nos enseñaron hacer en primaria... no te pases de lanza, que indignacion.

http://javahelp.freeiz.com
  #5 (permalink)  
Antiguo 01/04/2011, 09:29
 
Fecha de Ingreso: noviembre-2010
Mensajes: 29
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Imprecisión de Double

jajajaja L
  #6 (permalink)  
Antiguo 01/04/2011, 22:20
 
Fecha de Ingreso: abril-2011
Mensajes: 14
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Imprecisión de Double

Hola a todos,

Siento decepcionarlos, pero la culpa no es de Java. De hecho, todo sistema de cómputo (y por lo tanto, todo lenguaje de programación) tiene el mismo problema, y se basa en un hecho simple: los computadores convencionales trabajan en base 2 (binario) y no en decimal, y la conversión entre decimal y binario es el problema, porque en base 2 son precisos.

Permítanme dar un ejemplo: Tomen las calculadoras convencionales, pongan "1", dividan entre 3, multipliquen por 3, y resten 1. Técnicamente debería dar 0, pero la mayoría de calculadoras arrojan un número de la forma 0.0000....1.

No es una falla de lenguaje, es una falla del computador. No creo que valga la pena entrar en el detalle de cómo se modelan los números decimales en computador (la teoría de signo, exponente y mantisa, formatos de 32 y 64 bits, IEEE 754, etcétera).

Sugerencia: al trabajar con números tipo Double siempre es necesario decidir la precisión (cantidad de decimales) y formatear la salida. Eso soluciona el problema (se puede formatear con la función String.format ó la clase DecimalFormat).

Saludos.
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 14:52.