intdiv

(PHP 7, PHP 8)

intdivInteger-Division

Beschreibung

intdiv(int $num1, int $num2): int

Gibt den Integer-Quotienten der Division von num1 durch num2 zurück.

Parameter-Liste

num1

Die Ausgangszahl, die geteilt werden soll.

num2

Die Zahl, durch die num1 geteilt werden soll.

Rückgabewerte

Der Integer-Quotient der Division num1 durch num2.

Fehler/Exceptions

Wenn num2 0 ist, wird eine DivisionByZeroError-Exception ausgelöst. Wenn num1 PHP_INT_MIN ist und num2 -1, wird eine ArithmeticError-Exception ausgelöst.

Beispiele

Beispiel #1 intdiv()-Beispiel

<?php
var_dump
(intdiv(3, 2));
var_dump(intdiv(-3, 2));
var_dump(intdiv(3, -2));
var_dump(intdiv(-3, -2));
var_dump(intdiv(PHP_INT_MAX, PHP_INT_MAX));
var_dump(intdiv(PHP_INT_MIN, PHP_INT_MIN));
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

int(1)
int(-1)
int(-1)
int(1)
int(1)
int(1)

Beispiel #2 intdiv()-Beispiel mit ungültigem Divisor

<?php
try {
intdiv(PHP_INT_MIN, -1);
} catch (
Error $e) {
echo
get_class($e), ': ', $e->getMessage(), PHP_EOL;
}

try {
intdiv(1, 0);
} catch (
Error $e) {
echo
get_class($e), ': ', $e->getMessage(), PHP_EOL;
}
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

ArithmeticError: Division of PHP_INT_MIN by -1 is not an integer
DivisionByZeroError: Division by zero

Siehe auch

  • / - Gleitkomma-Division
  • % - Integer-Modulus
  • fmod() - Rest einer Gleitkommadivision (Modulus) - Gleitkomma-Modulus

add a note

User Contributed Notes 2 notes

up
42
AmeenRoss
10 years ago
This does indeed seem to be equal to intdiv:

<?php
function intdiv_1($a, $b){
    return ($a - $a % $b) / $b;
}
?>

However, this isn't:

<?php
function intdiv_2($a, $b){
    return floor($a / $b);
}
?>

Consider an example where either of the parameters is negative:
<?php
$param1 = -10;
$param2 = 3;
print_r([
    'modulus' => intdiv_1($param1, $param2),
    'floor' => intdiv_2($param1, $param2),
]);

/**
 * Array
 * (
 *     [modulus] => -3
 *     [floor] => -4
 * )
 */
?>
up
5
oittaa
3 years ago
Python style integer division, where the result is always rounded towards minus infinity.

1 // 2 is 0
(-1) // 2 is -1
1 // (-2) is -1
(-1) // (-2) is 0

<?php
function intdiv_py(int $num1, int $num2): int{
    if ($num1 < 0 xor $num2 < 0){
        $num1 = abs($num1);
        $num2 = abs($num2);
        $remainder = $num1 % $num2;
        return $remainder ? -1 -($num1 - $remainder) / $num2 : -$num1 / $num2;
    }
    return intdiv($num1, $num2);
}

var_dump(intdiv_py(1, 2)); // 0
var_dump(intdiv_py(-1, 2)); // -1
var_dump(intdiv_py(1, -2)); // -1
var_dump(intdiv_py(-1, -2)); // 0
?>
To Top