Problema division clase float, porfavor!!!
Hola,
necesito ayuda con un método de java, que no sé qué le pasa... Básicamente el problema es que no puedo hacer una división...
Os pego:
public void hallarLimites()
{
int i=0;
int aux=0;
double p=0;
for(i=0;i<lista.size();i++)
{
aux=lista.get(i).getApariciones();
p=(aux/entrada.length());
lista.get(i).setProbabilidad(p);
System.out.println("Proba :"+p);
}
}
El problema es que p (que es un double) vale o 1.0 o 0.0 no toma ningún otro valor... He intentado hacer un
System.out.println(p=(2/3)); y también sale 0.0
Un float (o double xq he probado con los dos) deberÃa aceptar una división, no???
Por favor, ayudaaaaaaaaaa, llevo 1hora dándole vueltas y nada...
gracias!
necesito ayuda con un método de java, que no sé qué le pasa... Básicamente el problema es que no puedo hacer una división...
Os pego:
public void hallarLimites()
{
int i=0;
int aux=0;
double p=0;
for(i=0;i<lista.size();i++)
{
aux=lista.get(i).getApariciones();
p=(aux/entrada.length());
lista.get(i).setProbabilidad(p);
System.out.println("Proba :"+p);
}
}
El problema es que p (que es un double) vale o 1.0 o 0.0 no toma ningún otro valor... He intentado hacer un
System.out.println(p=(2/3)); y también sale 0.0
Un float (o double xq he probado con los dos) deberÃa aceptar una división, no???
Por favor, ayudaaaaaaaaaa, llevo 1hora dándole vueltas y nada...
gracias!
He llegado demasiado tarde... pero si alguna otra persona tiene este problema encontrará solución aquÃ.
El error de tu lógica es la siguiente,
p es un double, pero aux y entrada.length son enteros! la division de dos enteros es una "division entera", en donde se truncan los decimales, es por eso que 2/3 (ambos son enteros) te dan 0 en lugar de 0.66666667.
Para solucionar tu problema tendrias que hacer (por ejemplo)
p = ((double)aux)/entrada.length();
Cuando uno de los dos es un double (o float), entonces se realiza una división que retorna una variable que acepta decimales.
Saludos
El error de tu lógica es la siguiente,
p es un double, pero aux y entrada.length son enteros! la division de dos enteros es una "division entera", en donde se truncan los decimales, es por eso que 2/3 (ambos son enteros) te dan 0 en lugar de 0.66666667.
Para solucionar tu problema tendrias que hacer (por ejemplo)
p = ((double)aux)/entrada.length();
Cuando uno de los dos es un double (o float), entonces se realiza una división que retorna una variable que acepta decimales.
Saludos
