Trabajar con números en PHP

Explicación de formateo de números en PHP: redondeo, simbolos de decimales y pasar números de texto a valor númerico. Todo esto ya sea con decimales o números enteros.

Tag PHP

Es muy común que programando una web o aplicación con PHP tengamos que trabajar con números, de los cuales los más problemáticos son los decimales, ya sean precios u otros tipos de datos númericos con mayor precisión. En estos casos normalmente necesitamos ajustar el valor de estas cifras a varias posiciones decimales dándoles formato con PHP.

En este tutorial voy a mostrarte, mediante ejemplos sencillos, el formateo de números en PHP, para números con decimales, transformaciones de texto a número y uso indistinto de coma o punto.

En concreto voy a tratar los siguientes tipos de formato de números:

  1. Redondeo de números con decimales o redondeo a números enteros.
  2. Ajuste de posiciones decimales de un número, sus símbolos específicos para decimales y millares. Esto es muy común utilizarlo para mostrar resultados en formato europeo/inglés/francés, etc.
  3. Transformar un número de tipo texto en un valor numérico.

Redondeo de números en PHP

Para redondear números decimales en PHP utilizaremos la funcion round.

Descripción de la función Round en PHP:

float round ( float $val, $precision, int $modo )

Esta función, por defecto, nos devuelve un número entero y aproximado hacia arriba, es decir:

<?php
$number = 33.3;
echo round ( $number ); //imprime 34
?>

Esta función permite total configuración sobre el resultado a devolver, pudiendo indicar la precisión (número de posiciones decimales) que deberá tener el número devuelto y, respecto al tipo de redondeo, si queremos un redondeo hacia arriba o hacia abajo

En concreto, las opciones de las que disponemos son:

  • PHP_ROUND_HALF_UP para redondear hacia arriba.
  • PHP_ROUND_HALF_DOWN para redondear hacia abajo o el número anterior más próximo.
  • PHP_ROUND_HALF_EVEN para redonder hacia el número par más cercano.
  • PHP_ROUND_HALF_ODD para redondear hacia el número impar más próximo.

Ejemplos Round con distintos tipos de redondeo y precisión:

<?php
echo round(9.55, 0, PHP_ROUND_HALF_UP);   // 10
echo round(9.55, 1, PHP_ROUND_HALF_UP);   // 9.6
echo round(9.5, 0, PHP_ROUND_HALF_DOWN); // 9
echo round(9.55, 1, PHP_ROUND_HALF_DOWN); // 9.5
echo round(7.5, 0, PHP_ROUND_HALF_EVEN); // 8
echo round(7.5, 0, PHP_ROUND_HALF_ODD);  // 7
?>

Ajuste de posiciones decimales en un número

Mientras programes en PHP podrás modificar los números enteros mediante el uso de la función number_format(). Esta función nos permite realizar varias conversiones y cambios a números decimales o enteros. Podremos:

  • Pasar de un número decimal a entero y viceversa con una simple llamada.
  • Indicar la precisión exacta requerida para un número (posiciones decimales).
  • Indicar los símbolos que queramos utilizar para los decimales (por defecto es el punto) y para los millares (por defecto se utiliza la coma).

Existen tres usos de la función: con un parámetro, con dos y con cuatro:

  1. number_format ( float $numero)
  2. number_format ( float $numero, $numero_decimales )
  3. number_format ( float $numero,  $numero_decimales, $simbolo_decimales,  $simbolo_millares )

Vamos a ver ejemplos de cada uso:

<?php
$num = 1999.9;
echo number_format($num); //imprime 1,999
echo number_format($num, 2); //imprime 1,999.90
echo number_format($num, 2, ",", ""); //imprime 1999,90
echo number_format($num, 1, ".", ""); //imprime 1999.90
echo number_format($num, 1, ".", " "); //imprime 1 999.90
?>

Transformar un STRING a número

En último lugar, me gustaría exponerte la forma rápida y correcta de pasar números en formato cadena de texto a un valor númerico entendible por el sistema. Con esta transformación podrás comenzar a realizar operaciones con estos datos, los cuales, de otra forma te llevarían a errores.

Esta transformación la haremos con 3 funciones de php para este cometido: intval(), floatval() y doubleval(). Debes utilizar la primera función php para obtener números enteros y la segunda y tercera para números decimales.

echo intval('2'); //imprime 2
echo floatval('3.4'); //imprime 3.4
echo doubleval("3.4"); //imrpime 3.4

Nota: ten en cuenta que el número que podrás obtener estará limitado por el tipo de sistema que utilices (32 bits o 64 bits). Siendo para 32 bits el rango de  -2147483648 a 2147483647.

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.