intdiv 是 PHP 7.0 引入的向下取整整数除法函数,语法为 intdiv(int $numerator, int $denominator): int,要求参数为整型、除数非零,结果等价于 floor($numerator / $denominator) 但更安全高效。

intdiv 是 PHP 7.0 引入的内置整数除法函数,用于执行**向下取整的整数除法**(即向负无穷方向舍入),避免了传统除法(/)返回浮点数、再用 (int) 或 floor() 转换可能引发的精度或边界问题。
intdiv 函数的基本用法
语法:intdiv(int $numerator, int $denominator): int
它接受两个整数参数(被除数和除数),返回一个整数结果。要求除数不能为 0,否则会抛出 DivisionByZeroError 异常。
- 支持正数、负数,结果始终为整数
- 行为等价于
floor($numerator / $denominator),但更安全、更高效 - 不进行类型转换:若传入非整数(如字符串数字、float),会触发
TypeError
常见使用示例
✅ 正常整数除法:
echo intdiv(10, 3); // 输出 3<br>echo intdiv(-10, 3); // 输出 -4(不是 -3)<br>echo intdiv(10, -3); // 输出 -4<br>echo intdiv(-10, -3); // 输出 3
⚠️ 注意负数结果:intdiv 遵循“向负无穷取整”,所以 intdiv(-10, 3) === -4(因为 -10 ÷ 3 ≈ -3.33…,向下取整为 -4)。
立即学习“PHP免费学习笔记(深入)”;
与传统方式对比及注意事项
❌ 不推荐写法(有隐患):
-
(int)(-10 / 3)→ 得到 -3(截断而非向下取整) -
floor(-10 / 3)→ 理论上正确,但浮点运算存在精度风险(如大数时floor(9223372036854775807 / 2)可能因浮点舍入出错) -
intval(-10 / 3)→ 同样是截断,且对 float 操作不严谨
✅ 推荐统一使用 intdiv() 处理整数除法场景,尤其在分页计算、数组分块、字节对齐等需要确定性整数商的场合。
错误处理建议
运行时需确保除数非零,且参数为整型:
- 可用
is_int()预检参数类型 - 用
try...catch (DivisionByZeroError $e)捕获除零异常 - 避免直接传入
$_GET或数据库字段等未经校验的数据,应先(int)强转或验证
例如:
try {<br> $page = intdiv((int)$_GET['total'], (int)$_GET['per_page']);<br>} catch (DivisionByZeroError $e) {<br> die('每页数量不能为零');<br>}



















