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 09/10/12, 20:54:15
Array

[xs_avatar]
truxky truxky no está en línea
Miembro del foro
 
Fecha de registro: nov 2010
Localización: Madrid
Mensajes: 150
Modelo de smartphone: Samsung Galaxy SIII
Tu operador: Yoigo
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.
Responder Con Cita


  #2  
Viejo 09/10/12, 21:16:08
Array

[xs_avatar]
Arasthel Arasthel no está en línea
Cocinero veterano
· Votos compra/venta: (1)
 
Fecha de registro: jun 2009
Localización: Almería
Mensajes: 1,946
Modelo de smartphone: Nexus 5
Tu operador: Amena
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));
Al menos, creo que la expresión debería de quedar así.

Un saludo.
Responder Con Cita
  #3  
Viejo 09/10/12, 22:04:50
Array

[xs_avatar]
BocataDeChoped BocataDeChoped no está en línea
Usuario muy activo
 
Fecha de registro: oct 2011
Mensajes: 1,075
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
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.
Responder Con Cita
  #4  
Viejo 09/10/12, 23:24:23
Array

[xs_avatar]
truxky truxky no está en línea
Miembro del foro
 
Fecha de registro: nov 2010
Localización: Madrid
Mensajes: 150
Modelo de smartphone: Samsung Galaxy SIII
Tu operador: Yoigo
Ok.

Muchas gracias a ambos por vuestras repuestas. No entendía que podía estar sucediendo.
Responder Con Cita
  #5  
Viejo 09/10/12, 23:36:38
Array

[xs_avatar]
Celtium Celtium no está en línea
Miembro del foro
 
Fecha de registro: may 2010
Mensajes: 432
Modelo de smartphone: Nexus One, 4

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.
Responder Con Cita
  #6  
Viejo 10/10/12, 01:05:45
Array

[xs_avatar]
contreras5 contreras5 no está en línea
Miembro del foro
 
Fecha de registro: abr 2012
Localización: Sinaloa, MX
Mensajes: 481
Modelo de smartphone: LeEco S3 x626
Tu operador: Otra
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
Responder Con Cita
  #7  
Viejo 10/10/12, 18:32:17
Array

[xs_avatar]
Celtium Celtium no está en línea
Miembro del foro
 
Fecha de registro: may 2010
Mensajes: 432
Modelo de smartphone: Nexus One, 4

 Cita: Originalmente Escrito por contreras5 Ver Mensaje
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 ;)
Responder Con Cita
Respuesta

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



Hora actual: 07:05:15 (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 / 邮件联系 /