intdiv

(PHP 7, PHP 8)

intdiv整数除法

描述

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

返回 num1 除以 num2 的整数商。

参数

num1

要除的数字。

num2

除数,用来除 num1

返回值

返回 num1 除以 num2 的整数商。

错误/异常

如果 num20,则抛出 DivisionByZeroError 异常。如果 num1PHP_INT_MINnum2-1,则抛出 ArithmeticError 异常。

示例

示例 #1 intdiv() 示例

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

参见

  • / - 浮点除法
  • % - 整数模运算
  • fmod() - 返回参数除法的浮点余数(模) - 浮点模运算

添加笔记

用户贡献笔记 7 个笔记

AmeenRoss
9 年前
这确实似乎等效于 intdiv

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

但是,这不是

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

考虑一个参数是负数的示例
<?php
$param1
= -10;
$param2 = 3;
print_r([
'modulus' => intdiv_1($param1, $param2),
'floor' => intdiv_2($param1, $param2),
]);

/**
* Array
* (
* [modulus] => -3
* [floor] => -4
* )
*/
?>
oittaa
2 年前
Python 风格的整数除法,结果总是向负无穷方向取整。

1 // 2 为 0
(-1) // 2 为 -1
1 // (-2) 为 -1
(-1) // (-2) 为 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
?>
sree dot millu at gmail dot com
4 年前
@AmeenRoss
这并不等效于 intdiv

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

参见此示例代码
<?php

$x
= 5.6;
$y = 1.4 ;

echo
intdiv($x,$y);

echo
"\n";

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

echo
intdiv_1($x,$y);
?>

//输出
5
4
admin at infis dot net dot ru
4 年前
对于较早版本的 PHP,您可以使用

function intdiv_1($a, $b) {
$a = (int) $a;
$b = (int) $b;
return ($a - fmod($a, $b)) / $b;
}
polettog at gmail dot com
9 年前
如果没有 intdiv(),以下可能是一个好方法($a 和 $b 都是整数类型,且不太大)
<?php
(int)($a / $b)
?>
因为在可整除的整数情况下,结果将是整数,并且不存在浮点数出现舍入但低于其表示值(例如 (0.1+0.7)*10)的风险。
$a 和 $b 确实需要是整数类型。
如果它们太大且不可整除,在转换为浮点数时会丢失一些精度,结果可能不准确。
Ts.Saltan
9 年前
$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
Bubonic dot pestilence at gmail dot com
8 年前
<?php

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

?>

不是这样吗?
To Top