W3docs

intdiv()

Aprende a usar la función intdiv() en PHP para realizar divisiones enteras y obtener el cociente sin parte decimal.

La función intdiv() en PHP realiza división entera: divide un entero por otro y devuelve el cociente en número entero, descartando cualquier resto. Se introdujo en PHP 7.0 para ofrecer una forma clara y explícita de expresar "cuántas veces cabe B en A" sin recurrir al operador / y un cast manual.

Esta página explica qué devuelve intdiv(), en qué se diferencia de los operadores / y %, cómo trata los números negativos y los flotantes, y cómo manejar los errores que puede lanzar.

Sintaxis

intdiv(int $num1, int $num2): int
  • $num1 — el dividendo (el número que se divide).
  • $num2 — el divisor (el número por el que se divide).
  • Devuelve el cociente $num1 / $num2 como un int, descartando la parte fraccionaria.

Un ejemplo básico

php— editable, runs on the server

10 / 3 es 3.333…, por lo que intdiv() conserva la parte entera, 3, y descarta el 0.333….

intdiv() frente a los operadores / y %

El operador de división regular / siempre produce un float cuando los números no se dividen de manera exacta, mientras que intdiv() siempre produce un int. El operador módulo % te da el resto que intdiv() descarta. Juntos, intdiv() y % recuperan el número original:

<?php
echo 10 / 3;          // 3.3333333333333 (float)
echo "\n";
echo intdiv(10, 3);   // 3   (int quotient)
echo "\n";
echo 10 % 3;          // 1   (remainder)
echo "\n";

// quotient * divisor + remainder == dividend
echo intdiv(10, 3) * 3 + (10 % 3); // 10
?>

Usa intdiv() cuando realmente necesites un resultado entero, como dividir elementos en páginas, convertir segundos en minutos o distribuir una cantidad en cubos de tamaño fijo.

Truncamiento hacia cero

intdiv() trunca hacia cero, no hacia el infinito negativo. Esto importa con operandos negativos y es una fuente común de errores cuando se asume que redondea hacia abajo:

<?php
echo intdiv(7, 2);    // 3
echo "\n";
echo intdiv(-7, 2);   // -3  (not -4)
echo "\n";
echo intdiv(7, -2);   // -3
echo "\n";
echo intdiv(-7, -2);  // 3
?>

-7 / 2 es -3.5; truncar hacia cero da -3. (Si específicamente quieres el comportamiento de suelo, usa floor(-7 / 2), que devuelve -4.)

Manejo de errores

intdiv() lanza una excepción en dos casos, ante los cuales debes protegerte:

  • La división por cero lanza un DivisionByZeroError.
  • intdiv(PHP_INT_MIN, -1) lanza un ArithmeticError, porque el resultado matemáticamente correcto es mayor que el valor máximo que puede almacenar un entero.
<?php
function safeIntdiv($a, $b) {
    try {
        return intdiv($a, $b);
    } catch (DivisionByZeroError $e) {
        return "Cannot divide by zero";
    } catch (ArithmeticError $e) {
        return "Result out of integer range";
    }
}

echo safeIntdiv(20, 4);   // 5
echo "\n";
echo safeIntdiv(20, 0);   // Cannot divide by zero
?>

Nota: intdiv() espera argumentos enteros. Un flotante como 7.9 se convierte a entero (descartando su parte fraccionaria) antes de ejecutar la división, por lo que intdiv(7.9, 2) se comporta como intdiv(7, 2). Para divisiones que conserven la parte fraccionaria de los flotantes, usa la función fmod() o el operador / en su lugar.

Conclusión

La función intdiv() proporciona una manera fiable y explícita de realizar divisiones enteras en PHP. Recuerda que trunca hacia cero, que el resto descartado está disponible mediante %, y que puede lanzar DivisionByZeroError y ArithmeticError. Para más información sobre operaciones numéricas, consulta PHP Math, PHP Operators y PHP Numbers.

Práctica

Práctica
¿Qué hace la función intdiv() en PHP?
¿Qué hace la función intdiv() en PHP?
Was this page helpful?