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

Jorge lopez

  • Sniper
  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 255
  • @SniperOfElite
    • Ver Perfil
    • Twitter @Sniperofelite
 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 de César Krall »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}
By: https://twitter.com/SniperOfElite

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2228
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Ejercicio! entrega CU00644B
« Respuesta #1 : 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
  • Moderador Global
  • Avanzado
  • *******
  • Mensajes: 255
  • @SniperOfElite
    • Ver Perfil
    • Twitter @Sniperofelite
Re:Ejercicio! entrega CU00644B
« Respuesta #2 : 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 de César Krall »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}
By: https://twitter.com/SniperOfElite

 

Esto es un laboratorio de ideas...
Aprender a programar

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".