PHP tiene un conjunto completo de funciones matemáticas para los casos más habituales: redondeo con varios modos, aritmética entera y flotante, valores absolutos, mínimos y máximos, y funciones para cálculos científicos básicos. Aquí están las más usadas en aplicaciones web reales.
round(), ceil() y floor(): redondeo
<?php // round(): redondea al entero más cercano, o a N decimales echo round(4.5); // 5 echo round(4.4); // 4 echo round(-4.5); // -5 (redondea alejándose del cero) echo round(4.567, 2); // 4.57 echo round(4.561, 2); // 4.56 // ceil(): siempre hacia arriba (techo) echo ceil(4.1); // 5 echo ceil(4.9); // 5 echo ceil(-4.9); // -4 ? hacia arriba, hacia cero // floor(): siempre hacia abajo (suelo) echo floor(4.9); // 4 echo floor(4.1); // 4 echo floor(-4.1); // -5 ? hacia abajo, alejándose del cero ?>
Modos de redondeo de round()
<?php // PHP_ROUND_HALF_UP (por defecto): 0.5 sube echo round(2.5, 0, PHP_ROUND_HALF_UP); // 3 echo round(-2.5, 0, PHP_ROUND_HALF_UP); // -3 (sube en valor absoluto) // PHP_ROUND_HALF_DOWN: 0.5 baja echo round(2.5, 0, PHP_ROUND_HALF_DOWN); // 2 // PHP_ROUND_HALF_EVEN (banquero): 0.5 redondea al par más cercano echo round(2.5, 0, PHP_ROUND_HALF_EVEN); // 2 echo round(3.5, 0, PHP_ROUND_HALF_EVEN); // 4 // PHP_ROUND_HALF_ODD: 0.5 redondea al impar más cercano echo round(2.5, 0, PHP_ROUND_HALF_ODD); // 3 echo round(3.5, 0, PHP_ROUND_HALF_ODD); // 3 // Precio final redondeado a 2 decimales para factura $precio = 24.995; echo round($precio, 2); // 25.00 echo number_format(round($precio, 2), 2, ',', '.'); // 25,00 ?>
abs() y fmod()
<?php // abs(): valor absoluto (para int y float) echo abs(-42); // 42 echo abs(42); // 42 echo abs(-3.14); // 3.14 // fmod(): resto de la división para floats (equivale a % para int) echo fmod(10.5, 3.2); // 0.9 (10.5 = 3*3.2 + 0.9) echo fmod(7.0, 2.0); // 1.0 // % solo para enteros echo 10 % 3; // 1 ?>
intdiv(): división entera
<?php // División entera (trunca hacia cero) echo intdiv(10, 3); // 3 echo intdiv(7, 2); // 3 echo intdiv(-7, 2); // -3 (trunca hacia cero, no hacia -inf) // Uso habitual: calcular páginas de paginación $total = 157; $porPagina = 25; $paginas = (int) ceil($total / $porPagina); // 7 páginas $ultimaPag = intdiv($total, $porPagina); // 6 páginas completas + 1 parcial ?>
min() y max()
<?php
// Con múltiples argumentos
echo min(3, 1, 4, 1, 5, 9, 2, 6); // 1
echo max(3, 1, 4, 1, 5, 9, 2, 6); // 9
// Con un array
echo min([3, 1, 4, 1, 5]); // 1
echo max([3, 1, 4, 1, 5]); // 5
// Clamp: limitar un valor a un rango
function clamp(float $valor, float $min, float $max): float
{
return min($max, max($min, $valor));
}
echo clamp(150, 0, 100); // 100
echo clamp(-10, 0, 100); // 0
echo clamp(50, 0, 100); // 50
?>
pow(), sqrt(), log() e hypot()
<?php // Potencias echo pow(2, 10); // 1024 echo 2 ** 10; // 1024 (operador ** desde PHP 5.6) echo pow(9, 0.5); // 3.0 (raíz cuadrada) // sqrt(): raíz cuadrada echo sqrt(144); // 12.0 echo sqrt(2); // 1.4142135623731 // log(): logaritmo (base e por defecto, o base específica) echo log(M_E); // 1.0 (logaritmo natural) echo log(100, 10); // 2.0 (log base 10) echo log10(1000); // 3.0 (atajo para log base 10) echo log(8, 2); // 3.0 (log base 2) // hypot(): hipotenusa de un triángulo rectángulo (más preciso que sqrt(a²+b²)) echo hypot(3, 4); // 5.0 echo hypot(5, 12); // 13.0 ?>
Constantes matemáticas
<?php
echo M_PI; // 3.1415926535898 (?)
echo M_E; // 2.718281828459 (número de Euler)
echo M_SQRT2; // 1.4142135623731 (?2)
echo M_LN2; // 0.69314718055995 (ln 2)
echo M_LOG2E; // 1.442695040889 (log2(e))
// Área de un círculo de radio r
function areaCirculo(float $radio): float
{
return M_PI * $radio ** 2;
}
echo round(areaCirculo(5), 4); // 78.5398
// Estadísticas básicas
function media(array $datos): float
{
return array_sum($datos) / count($datos);
}
function desviacionTipica(array $datos): float
{
$media = media($datos);
$varianza = array_sum(array_map(fn($x) => ($x - $media) ** 2, $datos)) / count($datos);
return sqrt($varianza);
}
$notas = [7.5, 8.0, 6.5, 9.0, 7.0];
echo 'Media: ' . media($notas) . "n"; // 7.6
echo 'Desviación: ' . round(desviacionTipica($notas), 4) . "n"; // 0.8246
?>
La documentación oficial de funciones matemáticas incluye también fdiv() para división segura que devuelve INF o NAN en lugar de errores, las funciones trigonométricas (sin(), cos(), tan()) y las funciones de conversión de base (base_convert(), hexdec(), bindec()).
