Funciones matemáticas en PHP: round, ceil, floor, abs, min, max, pow y más

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()).

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP