Entre las funciones matemáticas de PHP se encuentra una que nos permite redondear un float (número en coma flotante o número con decimales) al valor entero más próximo. Se trata de la función round(). Para explicar su uso, lo mejor es verlo con un par de ejemplos:

round(0.6) devolvería el valor entero 1.
round(7.3) devolvería el valor entero 7.

Pero en muchas ocasiones vamos a necesitar redondear un número en coma flotante de manera que conservemos algunos decimales. Por ejemplo, si estamos haciendo operaciones con euros o dólares, lo lógico es que conservemos dos decimales en el redondeo. Por extraño que parezca, PHP no incluye una función de redondeo que permita redondear conservando decimales y es por ello que vamos a comentar en este artículo una manera de conseguirlo.

Redondeo con dos decimales

Vamos a utilizar un pequeño truco para redondear con dos decimales, ayudándonos de la función round() de PHP. Se trata de hacer esta sencilla operación matemática.

Dado un valor, primero vamos a multiplicarlo por 100, lo vamos a redondear y finalmente, el resultado lo vamos a dividir otra vez por 100. El caso, en un ejemplo, es este:

Para el valor 2.7931. Primero lo multiplicamos por 100. Tenemos el valor 279.31. Ahora hacemos el redondeo, puesto que los 0.31 queremos deshacernos de ellos. Haríamos un round(279.31) que devuelve como resultado 279. Por último, a este valor lo dividimos por 100, para recuperar los decimales, lo que nos da 2.79, que es el valor que deseábamos obtener.

La fórmula que sacamos sería la siguiente:

round(valor_float * 100) / 100

Si queremos, podemos utilizar una función como esta para el redondeo hasta obtener dos cifras decimales:

function redondear_dos_decimal($valor) {
$float_redondeado=round($valor * 100) / 100;
return $float_redondeado;
}

Para un juego de valores como este:

redondear_dos_decimal(3.56666)
redondear_dos_decimal(3.008)
redondear_dos_decimal(3.66)
redondear_dos_decimal(3.199)
redondear_dos_decimal(3.9999)

Nos daría el siguiente resultado:

3.57
3.01
3.66
3.2
4

Redondear para un número de decimales cualquiera

Siguiendo las pautas marcadas en el ejemplo anterior, vamos a crear una función para redondear un float a cualquier número de decimales deseado.

Se trata de aplicar la misma lógica anterior. Para redondear a dos decimales hemos visto que había que multiplicar por 100, redondear y luego dividir otra vez por 100. Si queremos redondear con un solo decimal, tendremos que multiplicar por 10, redondear y luego dividir otra vez por 10.

Vamos a realizar un ejemplo de redondeo a tres decimales. Tenemos el valor 0.65195. Como queremos conservar 3 decimales, debemos multiplicar por 1000, con lo que obtenemos 651.95. Ahora hacemos el redondeo con la función round(), que nos deja la cifra sin decimales en 652 (se redondea al entero más próximo). Finalmente, debemos volver a dividir por 1000 el valor, con lo que tenemos 0.652.

La regla entonces es que tenemos que multiplicar y luego dividir, por la potencia de 10 con el número de decimales que deseamos conservar. Para obtener potencias en PHP tenemos la función pow(), que recibe la base y exponente de la potencia buscada.

Por ejemplo, pow(10,3) nos devuelve 1000 y pow(10,1) nos devuelve 10.

Con esta función en PHP podremos obtener el redondeo a los decimales que se desee.

function redondeado ($numero, $decimales) {
$factor = pow(10, $decimales);
return (round($numero*$factor)/$factor); }

Si la llamamos con un juego de valores como estos:

redondeado (0.00211,3)
redondeado (8.56,2)
redondeado (7.26,1)
redondeado (211,3)
redondeado (2.009,2)

Obtendremos los siguientes resultados:

0.002
8.56
7.3
211
2.01

El marketing online: la forma actual de conectar con los potenciales clientes en tiempo real El marketing online la forma actual de conectar con los potenciales clientes en tiempo real Ya han pasado muchos años desde que ha iniciado al intern...
Primer smartphone con cuatro núcleos ,Quad-core La firma taiwanesa HTC se propone revolucionar el mercado móvil con un nuevo smartphone bautizado como Edge, que se convertirá en el primero en llegar...
Microsoft espera vender 350 millones de copias de Windows 7 este año Steve Ballmer, CEO de Microsoft, se mostró muy optimista con los resultados que tendrá Windows 7 en el mercado durante lo que resta del año, al asegur...
Comparador equipos Windows y Mac Al margen de la intención de Microsoft de atraer usuarios que tengan dudas sobre si pagar el precio que vale un equipo de Apple (haciendo valer los ...
Ganar dinero con un blog desde el primer mes Aunque no es fácil y como se ha comentado hasta la saciedad en esta Web, hace falta tiempo para empezar a tener unos ingresos serios, mucha gente se p...
Firefox 4 se actualiza sSi hace poco los navegadores Google Chrome e Internet Explorer se actualizaron para ofrecer soporte a las últimas tecnologías, el navegador del zorro...
Object Initialization on PHP To create a new object, use the new statement to instantiate a class:
#Insólito: Flickr podrá vender las fotos de los usuarios a su antojo Flickr es uno de los proyectos que ha intentado revitalizar Marissa Mayer desde que es CEO de Yahoo y por revitalizar entiéndase “conseguir plata”. Ho...
Juegos Html5 Versus Juegos Flash, enterate cual es el preferido en Facebook Internet y el mundo de la tecnología en general está lleno de épicas batallas: entre navegadores (Firefox vs. Chrome vs. Internet Explorer vs. Opera v...
Validar Dirección Email con expresiones regulares en php Con este código validamos un email con expresines regulares en php, function validarEmail($email) { $reg = "#^(((( ?)*) )+)@(((( ?){0,62}...