![]() |
|
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 |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
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. |
|
#2
|
||||
|
||||
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.
Código:
X = (((double) (A+B))/((double) C)); Un saludo. |
#3
|
||||
|
||||
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. |
#4
|
||||
|
||||
Ok.
Muchas gracias a ambos por vuestras repuestas. No entendía que podía estar sucediendo. |
#5
|
||||
|
||||
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. |
#6
|
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 |
#7
|
||||
|
||||
Cita:
suerte ;) |
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 01:11:16 (GMT +2)
HTCMania: líderes desde el 2007