Home Menu

Menu



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


 
Herramientas
  #1  
Viejo 09/10/12, 20:54:15
Avatar de truxky
truxky truxky no está en línea
Miembro del foro
Mensajes: 150
 
Fecha de registro: nov 2010
Localización: Madrid
Mensajes: 150
Modelo de smartphone: Samsung Galaxy SIII
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de Arasthel
Arasthel Arasthel no está en línea
Cocinero veterano
Mensajes: 1,946
Compra y venta: (1)
 
Fecha de registro: jun 2009
Localización: Almería
Mensajes: 1,946
Modelo de smartphone: Nexus 5
Versión de ROM: DroidKang
Tu operador: Amena
Mencionado: 393 comentarios
Tagged: 1 hilos
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
Avatar de BocataDeChoped
BocataDeChoped BocataDeChoped no está en línea
Usuario muy activo
Mensajes: 1,075
 
Fecha de registro: oct 2011
Mensajes: 1,075
Modelo de smartphone: Samsung Galaxy S
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de truxky
truxky truxky no está en línea
Miembro del foro
Mensajes: 150
 
Fecha de registro: nov 2010
Localización: Madrid
Mensajes: 150
Modelo de smartphone: Samsung Galaxy SIII
Tu operador: Yoigo
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de Celtium
Celtium Celtium no está en línea
Miembro del foro
Mensajes: 432
 
Fecha de registro: may 2010
Mensajes: 432
Modelo de smartphone: Nexus One, 4
Mencionado: 0 comentarios
Tagged: 0 hilos
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
Avatar de contreras5
contreras5 contreras5 no está en línea
Miembro del foro
Mensajes: 481
 
Fecha de registro: abr 2012
Localización: Sinaloa, MX
Mensajes: 481
Modelo de smartphone: LeEco S3 x626
Versión de ROM: La última
Tu operador: Otra
Mencionado: 12 comentarios
Tagged: 0 hilos
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
Avatar de Celtium
Celtium Celtium no está en línea
Miembro del foro
Mensajes: 432
 
Fecha de registro: may 2010
Mensajes: 432
Modelo de smartphone: Nexus One, 4
Mencionado: 0 comentarios
Tagged: 0 hilos
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   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 01:11:16 (GMT +2)

Cookies
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007