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(32));
var_dump(intdiv(-32));
var_dump(intdiv(3, -2));
var_dump(intdiv(-3, -2));
var_dump(intdiv(PHP_INT_MAXPHP_INT_MAX));
var_dump(intdiv(PHP_INT_MINPHP_INT_MIN));
var_dump(intdiv(PHP_INT_MIN, -1));
var_dump(intdiv(10));
?>
int(1)
int(-1)
int(-1)
int(1)
int(1)
int(1)

Fatal error: Uncaught ArithmeticError: Division of PHP_INT_MIN by -1 is not an integer in %s on line 8
Fatal error: Uncaught DivisionByZeroError: Division by zero in %s on line 9

Siehe auch

  • / - Gleitkomma-Division
  • % - Integer-Modulus
  • fmod() - Gleitkomma-Modulus

add a note add a note

User Contributed Notes 4 notes

up
25
AmeenRoss
5 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
-8
polettog at gmail dot com
5 years ago
Without intdiv(), the following may be a good way (with $a and $b of type integer and not too big) :
<?php
(int)($a / $b)
?>
because in case of divisible integers, the result will be integer and there is no risk of float appearing round but below their represented value (like the case (0.1+0.7)*10).
$a and $b really needs to be of type integer though.
If they are too big and indivisible, some precision will be lost during the conversion to float and the result may be inaccurate.
up
-10
Bubonic dot pestilence at gmail dot com
5 years ago
<?php

function intdiv_2($a, $b)  {
   
$val = $a / $b;
    return (
$val < 0 ? "ceil" : "floor") ($val);
}

?>

Aren't this?!
up
-11
Ts.Saltan
5 years ago
$a = 57;
$b = 3;

var_dump(
    intdiv($a,$b),
    intdiv_1($a,$b),
    intdiv_2($a,$b)
);

function intdiv_1($a, $b){
    return ($a-$a%$b)/$b;
}

function intdiv_2($a, $b){
    return floor($a/$b);
}
//intdiv($a, $b) == floor($a/$b) == ($a-$a%$b)/$b
To Top