W3docs

intdiv()

Die intdiv()-Funktion in PHP führt eine ganzzahlige Division durch und gibt den ganzzahligen Quotienten zurück.

Die intdiv()-Funktion in PHP führt eine ganzzahlige Division durch: Sie dividiert eine ganze Zahl durch eine andere und gibt den ganzzahligen Quotienten zurück, wobei der Rest verworfen wird. Sie wurde in PHP 7.0 eingeführt, um eine klare und explizite Möglichkeit zu bieten, auszudrücken „wie oft passt B in A", ohne auf den /-Operator und eine manuelle Typumwandlung zurückgreifen zu müssen.

Diese Seite erklärt, was intdiv() zurückgibt, wie es sich von den Operatoren / und % unterscheidet, wie es negative Zahlen und Floats behandelt und wie die möglichen Fehler abgefangen werden.

Syntax

intdiv(int $num1, int $num2): int
  • $num1 — der Dividend (die zu dividierende Zahl).
  • $num2 — der Divisor (die Zahl, durch die dividiert wird).
  • Gibt den Quotienten $num1 / $num2 als int zurück, wobei der Nachkommaanteil abgeschnitten wird.

Ein einfaches Beispiel

php— editable, runs on the server

10 / 3 ergibt 3,333…, daher behält intdiv() den ganzzahligen Anteil 3 und verwirft die 0,333….

intdiv() vs. die Operatoren / und %

Der reguläre Divisionsoperator / liefert immer einen float, wenn die Zahlen nicht ohne Rest teilbar sind, während intdiv() stets einen int zurückgibt. Der Modulo-Operator % liefert den Rest, den intdiv() verwirft. Zusammen ermöglichen intdiv() und % die Rekonstruktion der ursprünglichen Zahl:

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

Verwenden Sie intdiv(), wenn Sie wirklich ein ganzzahliges Ergebnis benötigen, etwa beim Aufteilen von Elementen in Seiten, beim Umrechnen von Sekunden in Minuten oder beim Verteilen einer Anzahl in Buckets fester Größe.

Abschneiden in Richtung Null

intdiv() schneidet in Richtung Null ab, nicht in Richtung negativer Unendlichkeit. Das ist bei negativen Operanden relevant und eine häufige Fehlerquelle, wenn Entwickler davon ausgehen, dass abgerundet wird:

<?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 ist -3,5; das Abschneiden in Richtung Null ergibt -3. (Wenn Sie explizit das Abrunden benötigen, verwenden Sie floor(-7 / 2), das -4 zurückgibt.)

Fehlerbehandlung

intdiv() wirft in zwei Fällen eine Ausnahme, gegen die Sie sich absichern sollten:

  • Division durch null wirft einen DivisionByZeroError.
  • intdiv(PHP_INT_MIN, -1) wirft einen ArithmeticError, da das mathematisch korrekte Ergebnis größer ist als der maximale Wert, den eine ganze Zahl aufnehmen kann.
<?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
?>

Hinweis: intdiv() erwartet ganzzahlige Argumente. Ein Float wie 7.9 wird vor der Division in eine ganze Zahl umgewandelt (der Nachkommaanteil wird dabei abgeschnitten), sodass intdiv(7.9, 2) wie intdiv(7, 2) funktioniert. Für Divisionen, bei denen der Nachkommaanteil von Floats erhalten bleiben soll, verwenden Sie stattdessen die Funktion fmod() oder den /-Operator.

Fazit

Die intdiv()-Funktion bietet eine zuverlässige und explizite Möglichkeit, in PHP eine ganzzahlige Division durchzuführen. Beachten Sie, dass sie in Richtung Null abschneidet, dass der verworfene Rest über % verfügbar ist und dass sie DivisionByZeroError sowie ArithmeticError auslösen kann. Weitere Informationen zu numerischen Operationen finden Sie unter PHP Math, PHP Operators und PHP Numbers.

Übungen

Übung
Was macht die intdiv()-Funktion in PHP?
Was macht die intdiv()-Funktion in PHP?
Was this page helpful?