W3docs

intdiv()

Découvrez la fonction intdiv() en PHP, utilisée pour effectuer une division entière et retourner le quotient entier.

La fonction intdiv() en PHP effectue une division entière : elle divise un entier par un autre et retourne le quotient en nombre entier, en ignorant le reste. Elle a été introduite en PHP 7.0 pour vous offrir une façon claire et explicite d'exprimer « combien de fois B est contenu dans A », sans avoir recours à l'opérateur / et à un transtypage manuel.

Cette page explique ce que retourne intdiv(), en quoi elle diffère des opérateurs / et %, comment elle traite les nombres négatifs et les flottants, et comment gérer les erreurs qu'elle peut lever.

Syntaxe

intdiv(int $num1, int $num2): int
  • $num1 — le dividende (le nombre à diviser).
  • $num2 — le diviseur (le nombre par lequel on divise).
  • Retourne le quotient $num1 / $num2 sous forme d'int, la partie fractionnaire étant supprimée.

Exemple de base

php— editable, runs on the server

10 / 3 vaut 3,333…, donc intdiv() conserve la partie entière, 3, et abandonne les 0,333….

intdiv() vs. les opérateurs / et %

L'opérateur de division ordinaire / produit toujours un float lorsque les nombres ne se divisent pas exactement, tandis qu'intdiv() produit toujours un int. L'opérateur modulo % vous donne le reste qu'intdiv() ignore. Ensemble, intdiv() et % permettent de retrouver le nombre d'origine :

<?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
?>

Utilisez intdiv() lorsque vous avez réellement besoin d'un résultat entier, par exemple pour répartir des éléments en pages, convertir des secondes en minutes, ou distribuer un total dans des groupes de taille fixe.

Troncature vers zéro

intdiv() tronque vers zéro, et non vers l'infini négatif. Cela importe avec des opérandes négatifs et constitue une source d'erreur fréquente lorsqu'on suppose qu'elle arrondit vers le bas :

<?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 vaut -3,5 ; tronquer vers zéro donne -3. (Si vous souhaitez explicitement un comportement plancher, utilisez floor(-7 / 2), qui retourne -4.)

Gestion des erreurs

intdiv() lève une exception dans deux cas, contre lesquels vous devez vous prémunir :

  • La division par zéro lève une DivisionByZeroError.
  • intdiv(PHP_INT_MIN, -1) lève une ArithmeticError, car le résultat mathématiquement correct est supérieur à la valeur maximale qu'un entier peut contenir.
<?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
?>

Note : intdiv() attend des arguments entiers. Un flottant comme 7.9 est converti en entier (sa partie fractionnaire est supprimée) avant que la division soit effectuée, donc intdiv(7.9, 2) se comporte comme intdiv(7, 2). Pour une division qui conserve la partie fractionnaire des flottants, utilisez la fonction fmod() ou l'opérateur / à la place.

Conclusion

La fonction intdiv() offre un moyen fiable et explicite d'effectuer une division entière en PHP. N'oubliez pas qu'elle tronque vers zéro, que le reste ignoré est accessible via %, et qu'elle peut lever DivisionByZeroError et ArithmeticError. Pour en savoir plus sur les opérations numériques, consultez PHP Math, PHP Operators et PHP Numbers.

Pratique

Pratique
Que fait la fonction intdiv() en PHP ?
Que fait la fonction intdiv() en PHP ?
Was this page helpful?