W3docs

intdiv()

Разбираем функцию intdiv() в PHP: целочисленное деление, отличия от операторов / и %, обработка ошибок и примеры.

Функция intdiv() в PHP выполняет целочисленное деление: она делит одно целое число на другое и возвращает целую часть частного, отбрасывая остаток. Функция была введена в PHP 7.0, чтобы дать явный и понятный способ выразить «сколько раз B вмещается в A» без использования оператора / и ручного приведения типов.

На этой странице описывается, что возвращает intdiv(), чем она отличается от операторов / и %, как обрабатывает отрицательные числа и числа с плавающей точкой, а также как справляться с исключениями, которые она может выбрасывать.

Синтаксис

intdiv(int $num1, int $num2): int
  • $num1делимое (число, которое делится).
  • $num2делитель (число, на которое делят).
  • Возвращает частное $num1 / $num2 как int, дробная часть отбрасывается.

Базовый пример

php— editable, runs on the server

10 / 3 равно 3.333…, поэтому intdiv() сохраняет целую часть 3, отбрасывая 0.333….

intdiv() vs. операторы / и %

Обычный оператор деления / всегда возвращает float, если числа не делятся нацело, тогда как intdiv() всегда возвращает int. Оператор остатка от деления % даёт остаток, который intdiv() отбрасывает. Вместе intdiv() и % позволяют восстановить исходное число:

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

Используйте intdiv(), когда вам действительно нужен целочисленный результат — например, при разбивке элементов на страницы, переводе секунд в минуты или распределении количества по фиксированным группам.

Усечение в сторону нуля

intdiv() усекает в сторону нуля, а не в сторону отрицательной бесконечности. Это важно при работе с отрицательными операндами и является частым источником ошибок, когда предполагается поведение «округления вниз»:

<?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 равно -3.5; усечение в сторону нуля даёт -3. (Если вам нужно поведение функции floor, используйте floor(-7 / 2), которая возвращает -4.)

Обработка ошибок

intdiv() выбрасывает исключение в двух случаях, от которых следует защититься:

  • Деление на ноль выбрасывает DivisionByZeroError.
  • intdiv(PHP_INT_MIN, -1) выбрасывает ArithmeticError, потому что математически корректный результат превышает максимальное значение, которое может хранить целое число.
<?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
?>

Примечание: intdiv() ожидает целочисленные аргументы. Число с плавающей точкой, например 7.9, будет приведено к целому (дробная часть отбрасывается) до выполнения деления, поэтому intdiv(7.9, 2) ведёт себя как intdiv(7, 2). Для деления с сохранением дробной части используйте функцию fmod() или оператор /.

Заключение

Функция intdiv() предоставляет надёжный и явный способ выполнять целочисленное деление в PHP. Помните, что она усекает в сторону нуля, что отброшенный остаток доступен через %, и что она может выбрасывать DivisionByZeroError и ArithmeticError. Подробнее о числовых операциях см. в разделах PHP Math, PHP Operators и PHP Numbers.

Практика

Практика
Что делает функция intdiv() в PHP?
Что делает функция intdiv() в PHP?
Was this page helpful?