Autor Tema: Ejercicio! entrega CU00644B error precision cálculos java números decimales  (Leído 4845 veces)

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
 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
Código: [Seleccionar]
base * resultado para obtener este resultado. mi pregunta es, porque no esta devolviendo 255 y en su lugar esta devolviendo  254.99999999999997.


Código: [Seleccionar]
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!
« Última modificación: 18 de Mayo 2015, 23:12 por César Krall »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Ejercicio! entrega CU00644B
« Respuesta #1 en: 30 de Junio 2014, 20:07 »
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!
Responsable de departamento de producción aprenderaprogramar.com

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:Ejercicio! entrega CU00644B
« Respuesta #2 en: 30 de Junio 2014, 22:25 »
 Excelente! Creo que estoy comenzando a amar las api  ;D

Gracias César. Salu2!
« Última modificación: 18 de Mayo 2015, 23:12 por César Krall »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".