miércoles, 3 de noviembre de 2010

Redondear un número flotante

No existe una función específica para poder redondear un número, pero con una combinación de las funciones básicas de math.h se puede lograr el mismo efecto.

Si se desea redondear el valor 1.768 a dos decimales se puede hacer lo siguiente:
floor(1.768*100+0.5)/100

Nota. se coloca
10 : 1 decimal
100 : 2 decimales
1000: 3 decimales...

Este es el efecto que se logra (paso a paso):
floor(1.768*100+0.5)/100
= floor(176.8 +0.5)/100
= floor(177.3 )/100
= 177 /100
= 1.77

Se pueden crear las siguientes macro (colócalas al inicio de tu código fuente):

#define ROUND(num) floor(num*100+0.5)/100

#define ROUND_V2(num,dec) floor(num*(pow(10,dec))+0.5)/pow(10,dec)


Pueden ser usadas de la siguiente forma:
float num = ROUND(1.7684); // produce 1.77
float num2 = ROUND_V2(1.7684,2); // produce 1.77
float num3 = ROUND_V2(1.7684,1); // produce 1.8
float num4 = ROUND_V2(1.7684,3); // produce 1.768