Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Jorge lopez en 29 de Junio 2014, 21:01
-
Hola mi gente del foro!
Tengo la siguiente situación al ejecutar el método que he creado en esta clase según lo requerido por el ejercicio de esta entrega:
según el ejercicio si paso como valores de parámetros los valores (2.55,2) el método debería devolver 255 como resultado. pero mi método esta devolviendo 254.99999999999997 a pesar de que cuenta con una sintaxis que le indica multiplicar 2.55*100 base * resultado
para obtener este resultado. mi pregunta es, porque no esta devolviendo 255 y en su lugar esta devolviendo 254.99999999999997.
public class multiplicadorDieces{
public multiplicadorDieces(){
}
//metodo que devuelve el resultado de elevar 10 al valor de la variable exponente.
public int diezElevadoAlValorDeExponente(int exponente){
int resultado = 1;
for(int i=1; i<=exponente; i++){resultado = resultado * 10;}
return resultado;
}
//metodo que devuelve el resultado de multiplicar el valor de la variable base por el resultado de elevar 10 al valor de la variable exponente
public double multiplicadorPorDieces(double base, int exponente){
int resultado = 1;
for(int i=1; i<=exponente; i++){resultado = resultado * 10;}
return base * resultado ;
}
}
Salu2!
-
Tienes razón :o La respuesta a por qué no está devolviendo el resultado correcto está relacionado con la forma de representar los valores numéricos decimales que tienen los computadores. Nosotros pensamos que usan números como nosotros pero internamente no es así.
En este caso te has encontrado con un problema que se presenta con cierta frecuencia: la precisión cuando se trabaja con decimales.
Es algo que llevaría tiempo conocer en profundidad, por ello lo que te recomiendo es que apliques una solución conocida, como usar:
return Math.round(base * resultado * 100000) / 100000;
De este modo obtienes el resultado correcto, al menos en las pruebas que he podido hacer sí me lo devuelve correctamente.
Saludos!
-
Excelente! Creo que estoy comenzando a amar las api ;D
Gracias César. Salu2!