Cómo dar formato a números en PHP cómodamente a través de la función number_format() que permite indicar el número de decimales, así como la separación entre la parte entera y la decimal o la separación de millares.
Cuando mostramos un número como contenido en una página web podemos generalmente necesitamos usar un formato específico. Por ejemplo, que tenga sólo dos decimales, o que utilice comas -o puntos- para separar decimales, así como las separar las unidades de millar. Típicos formatos de número podrían ser:
1.000.505,56 5003.60 5,000.00
Presentar los números con uno u otro formato es sencillo, ya que en PHP existe una función específica para dar formato a los números, que dependiendo de los parámetros recibidos los formateará de una u otra manera. En este artículo vamos a conocer dicha función, así como sus posibilidades de configuración, explorando sus posibilidades a través de varios ejemplos.
Función number_format()
El formateo de números lo llevaremos a cabo con la función de PHP number_format()
. Esta función recibe uno, dos o cuatro parámetros. Es decir, tenemos estas restricciones:
- Hay un único parámetro obligado (el número que queremos formatear).
- El segundo parámetro es opcional, tal como el tercero y el cuarto
- Pero si especificamos el tercer parámetro, estamos obligados a especificar también el cuarto.
Veamos con detalle los parámetros de la función de formateo de números de PHP, con diversos ejemplos.
Parámetro 1 number_format, el número:
El primer parámetro es el número a formatear. Tal como dijimos, aunque resulta obvio, es un parámetro siempre necesario.
$numero = 15200.67;
number_format($numero);
//devuelve 15,201
En este caso, el formateo del número nos dará el número sin decimales y con una coma como separador de miles. Este formato es el que se utiliza en inglés (las personas de habla inglesa separan con comas los millares al escribir los números), que seguramente no nos sirva a los desarrolladores que trabajamos en español.
Cabe fijarse que la función number_format()
ha realizado también un redondeo de los decimales que no está mostrando. Este redondeo lo vamos a ver bien en este ejemplo:
$numero = 999999999.99;
number_format($numero);
//devuelve 1,000,000,000
Parámetro 2 number_format, los decimales:
Con el segundo parámetro, que es opcional, indicamos el número de decimales que queremos que aparezcan en el número formateado.
$numero = 15200.67;
number_format($numero,2);
//devuelve 15,201.67
Como vemos, en este caso se han incorporado dos decimales al formato del número. Utiliza comas para separar los miles y un punto para separar las unidades de millar. Como vemos, sigue utilizando la notación inglesa para formatear números.
Otro ejemplo, en el que podemos apreciar que siempre se hace un redondeo del número, si los decimales a mostrar son menos que los que tiene el número original.
$numero = 1885200.89;
number_format($numero,1);
//devuelve 1,885,200.9
Parámetros 3 y 4 para formateo de separadores de decimales y de unidades de millar
Los últimos parámetros, que debemos utilizar siempre juntos, sirven para especificar los separadores que queremos utilizar para los decimales y las unidades de millar. Si queremos formatear los números con la notación española tendríamos que utilizar forzosamente estos parámetros.
Por ejemplo, así haríamos para formatear los números en español:
- Separar los decimales con coma
- Separar las unidades de millar con un punto.
$numero = 1002002.365;
number_format($numero, 2, ",", ".");
//devuelve 1.002.002,37
Si, por ejemplo, no separar los millares, simplemente pasamos como separador de unidades de millar (cuarto parámetro) la cadena vacía:
$numero = 9540.2;
number_format($numero, 2, ",", "");
//devuelve 9540,20
Conclusión sobre el formato de números con PHP
Eso es todo lo que tenemos que saber para formatear números en PHP. Como se ha podido ver es bien sencillo presentar los números con los decimales que necesitemos y con los separadores correctos de decimales y millares para el idioma español. Con unos pocos cambios también podríamos hacerlo para otros idiomas como el inglés, de hecho esta opción solamente requeriría omitir los últimos dos argumentos de la llamada a la función.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...