Portada | Monotemáticos | Secciones | Desarrolladores | Comunidad | Servicios | Servicios profesionales | RSS
Desde 0 | HTML | CSS | ASP | PHP | AJAX | Javascript | Promoción de webs | Rentabilidad de webs
Directorio | Manuales | Scripts | FAQs | Programas | Artículos Copyleft | Actualidad | La Cosecha | Colabora
Registrarse | Vuestras páginas | Foros del web | Lista de correo | Boletín de novedades
Generador METAs | Compras | Busca cursos
Alojamiento | Dominios.es | Micropagos SMS | Buscadores | Patentes, marcas | Creación web | Multimedia | Videos
Desarrollo Freelance | Buscar proyectos | Buscar profesionales | Solicitar desarrollo

Redondear decimales en PHP


Realizamos una función para redondear decimales en PHP, es decir, formatear un float para que tenga un número de decimales cualquiera que se desee.


06/6/05 - 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

Esperamos que este par de funciones os resulten útiles. Hay que agradecer a Héctor Alonso la segunda de las funciones mostradas en este artículo.

Referencias: También recomendamos la lectura de la FAQ Formatear decimales en PHP, donde se explica con detalle la función de PHP number_format(), que aparte de redondear decimales, permite formatear el número para que muestre el separador que deseemos en los millares y en los decimales.

Si trabajamos con ASP, tenemos otro artículo para aprender a redondear decimales en ASP.

 Seguir navegando a partir aquí:
+ 1 manual relacionado
+ 1 categoria relacionada
+ 8 comentarios (Añadir)
+ 3 comentarios no revisados

 Autoría, licencia y acciones sobre este artículo

Informe de Pablo González*
URL: http://www.xski.net

Licencia Copyleft.
Puedes reproducirlo citando al autor y enlazando con DesarrolloWeb.com.

* Para consultas técnicas utilizar la lista de correo.

Versión imprimible Versión imprimible del artículo
Enviar artículo por e-mail Enviar artículo por e-mail
Añadir un comentario al artículo Publicar un comentario del artículo

Manuales relacionados con este artículo
Dentro de Taller de PHP

Categorias relacionadas
A través de las categorías de nuestro directorio se pueden encontrar otro tipo de recursos relacionados con este artículo:
+ Entrar en Scripts en PHP


 Comentarios de los visitantes
Los comentarios de los visitantes son para ampliar la información del artículo. Cualquiera puede participar.
Se muestran 8 comentarios revisados

 Comentario de Sergio
06/6/05 
Creo que no hace falta tanta complicación para redondear a un número determinado de decimales. Yo lo hago con la misma función pero de esta forma:

- si quiero redondear el número 5.389273 a 3 decimales utilizo
round(5.389273,3);

- a dos decimales
round(5.389273,2);

Nótese que lo único que hago es añadir una coma después del número e indicar el número de decimales que quiero.

Eso es todo. Saludos y espero haber ayudado.


 Comentario de Andrés
06/6/05 
Otra forma de setear la cantidad de decimales es con mumber_format: number_format(el_numero_a convertir,el_numero_de_decimales)

 Comentario de Yaroth
11/6/05 
Me podrian decir como le hago para dale formato a una cantidad numerica, ejemplo.

Si tengo en una base de datos el valor 1500.00 , deseo mostrarlo en una pagina a si: $ 1,500.00 ¿Como agrego la ","

Gracias...


 Comentario de JC
08/10/05 
A partir de ya viene implementada esta función (sacado del manual):

round
(PHP 3, PHP 4, PHP 5)

round -- Redondea un flotante
Descripción
float round ( float val [, int precision] )

Devuelve el valor de val redondeado a la precision especificada (número de dígitos después del punto decimal). precision puede ser también un valor negativo o cero (el valor predeterminado).

Ejemplo 1. Ejemplos de round()

<?php
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
?>

Nota: PHP no maneja cadenas como "12,300.2" correctamente de forma predeterminada. Vea conversión desde cadenas.

Nota: El parámetro precision fue introducido en PHP 4.

Vea también: ceil(), floor(), y number_format().

 Comentario de JC
08/10/05 
Respondiendo a Yaroth:

<?php

$numero = 1234.56;

// notacion inglesa (predeterminada)
$numero_formato_ingles = number_format($numero);
// 1,235

// notacion francesa
$numero_formato_frances = number_format($numero, 2, ',', ' ');
// 1 234,56

$numero = 1234.5678;

// notacion inglesa sin separador de miles
$numero_formato_ingles = number_format($numero, 2, '.', '');
// 1234.57

?>

 Comentario de Roberto
18/10/05 
Para redondear a 2 decimales una variable en javascript:
importe=Math.round(importe* 100) / 100;

 Comentario de joseluis
05/4/06 
bueno... round(num,cant dec) hace todo lo expuesto en el articulo, gracias andres por el "number_format()", estaba buscando algo asi.... siempre uso round() pero para la presentación en reportes es mejor number_format()

 Comentario de Gustavo
18/12/06 
Lo interensante de la función number_format(num,dec) a diferencia de round es que devuelve siempre la cantidad de decimales aún siendo ceros.

Ejemplo:
round(5.1, 3) - devuelve: 5.1
number_format(5.1, 3) - devuelve: 5.100

Añadir un comentario al artículo Añadir un comentario del artículo
 Comentarios sin revisar
Entre los comentarios no revisados puede haber algunos interesantes que se hayan enviado recientemente.
 Se han encontrado 3 comentarios sin revisar

Ver el comentario no revisadoVer los comentarios no revisados
Añadir un comentario al artículo Añadir un comentario del artículo



Enlaces:
Maestrosdelweb
  Ir arriba

Manuales relacionados
+Taller de PHP
Categorías
+Scripts en PHP

Lectura recomendada

Compra este libro en Agapea, la librería urgente a domicilio.

Tienda DesarrolloWeb

DesarrolloWeb.com | Copyright | Anunciese | Acerca de | Datos legales | Contacta | Por GuiarteMultimedia