文字

intdiv

(PHP 7)

intdivInteger division

说明

int intdiv ( int $dividend , int $divisor )

Returns the integer quotient of the division of dividend by divisor.

参数

dividend

Number to be divided.

divisor

Number which divides the dividend.

返回值

The integer quotient of the division of dividend by divisor.

错误/异常

If divisor is 0, a DivisionByZeroError exception is thrown. If the dividend is PHP_INT_MIN and the divisor is -1, then an ArithmeticError exception is thrown.

范例

Example #1 intdiv() example

<?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 ));
var_dump ( intdiv ( PHP_INT_MIN , - 1 ));
var_dump ( intdiv ( 1 0 ));
?>
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

用户评论:

[#1] polettog at gmail dot com [2015-07-31 09:34:23]

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.

[#2] AmeenRoss [2015-07-11 13:15:50]

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),
]);


?>

[#3] Ts.Saltan [2015-06-16 20:53:37]

$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

上一篇: 下一篇: