Hola a todos, he creado un programa para hacer el redondeo de un número de tipo
double. Curiosamente, en ocasiones aparecen ligeros fallos de precisión. Echad un vistazo:
Código Java:
Ver originalpublic static double redondeo(double num, int decimales)
{
// Almacena el decimal siguiente a los decimales que queremos obtener
int ulti
= (int)(num
*Math.
pow(10, decimales
+1))%10
;
// Almacena el número truncado
num
= (float)(int)(num
*Math.
pow(10, decimales
))/Math.
pow(10, decimales
);
// Le añade 0.1, 0.001, ... en función de los decimales pedidos
if(ulti>4)
num
+= Math.
pow(10,
-decimales
);
// Trunca de nuevo, parece que Java da ciertos fallos de precisión, y puede devolver algo como 3.1416000000000004 en lugar de 3.1416
num
= (float)(int)(num
*Math.
pow(10, decimales
))/Math.
pow(10, decimales
);
return num;
}
Como veis, he tenido que añadir un truncamiento final para evitar cosas del tipo 3.1416000000000004. ¿A qué se debe esto? ¿Es culpa mía? ¿Es algo normal?
Gracias de antemano por vuestras respuestas.