Ver la Versión Completa : Operaciones matemáticas
Buenas noches a todos.
Estoy realizando cálculos en la aplicación que estoy desarrollando, pero algo debo estar haciendo mal ya que no me salen los datos esperados.
Estos son los datos:
A = 2
B = 0
C = 3
X = ??
X= (double) ((A+B)/C);
El valor debería ser 0.6666, y sin embargo el valor de X me sale a 0.
La variable X es un double inicializado a 0.0, y el resto son Integer.
¿Qué estoy haciendo mal??
Un saludo.
Arasthel
09/10/12, 21:16:08
Le estás diciendo que te pase el resultado (entero) de la operación a double. En lugar de eso, dile que te pase el resultado de dividir el double de la suma entre el double C.
X = (((double) (A+B))/((double) C));
Al menos, creo que la expresión debería de quedar así.
Un saludo.
BocataDeChoped
09/10/12, 22:04:50
Tienes dos problemas. El primero ya te lo ha contestado el compañero anterior: estás aplicando un cast a double sobre una operación que se ha computado como entero. En cristiano: X = (double) 0 = 0.0
El segundo es que le estás dando por saco al compilador al hacer la promoción de tipos de int a double. Java no es C/C++, es un lenguaje fuertemente tipado por lo que los casts deben evitarse. Lo suyo es que definas todas las variables como double.
Ok.
Muchas gracias a ambos por vuestras repuestas. No entendía que podía estar sucediendo.
Celtium
09/10/12, 23:36:38
Como te comentan estas mezclando primitivos para hacer cálculos, eso no es bueno como ves. Pueden y se pierden valores en las operaciones, pudiendo dar resultados que no son representativos.
Trabaja siempre con el mismo tipo de valor y después muestra el resultado como quieras. Todos los primitivos se pueden pasar a String si lo necesitas.
Estas seguro que necesitas un double? el float suele valer y es de menor rango.
contreras5
10/10/12, 01:05:45
efectivamente como todos han dicho evitate hacer cast y maneja todas las variables del mismo tipo, a menos que sea estricamente necesario tener diferentes tipos.
Por lo demas, float double, como quieras no te preocupes tanto por el rango, a fin de cuentas hoy en dia ma ram y procesador no son un problema mayor como hace 15 años
Celtium
10/10/12, 18:32:17
efectivamente como todos han dicho evitate hacer cast y maneja todas las variables del mismo tipo, a menos que sea estricamente necesario tener diferentes tipos.
Por lo demas, float double, como quieras no te preocupes tanto por el rango, a fin de cuentas hoy en dia ma ram y procesador no son un problema mayor como hace 15 años
Lo decia no solo por la memoria que usa, el double te da rápidamente valores del tipo 0.123655666884E64, arrastra muchos decimales. Se hace muy engorroso depurar (por lo menos a mi) y trabajar con ellos. Si no son obligatorios por la exactitud de la funcion yo personalmente no los uso.
suerte ;)
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.