intdiv 是 php 7.0 引入的整数除法函数,执行向零取整的整除并返回 int 类型结果;要求参数为整数且除数非零,避免浮点精度问题与负数截断歧义,但不等价于 floor 除法。

intdiv 是 PHP 7.0 引入的内置函数,专门用于执行**整数除法**(即向零取整的整除),返回 int 类型结果,避免了传统除法(/)产生 float 的问题和取整歧义。
intdiv 的基本用法
语法:intdiv(int $numerator, int $denominator): int
参数要求严格为整数,且 $denominator 不能为 0(否则抛出 DivisionByZeroError 异常)。
示例:
-
intdiv(10, 3)→ 3(不是 3.333…,也不四舍五入,是向零截断) -
intdiv(-10, 3)→ -3(负数也向零取整,不是向下取整) -
intdiv(10, -3)→ -3 -
intdiv(-10, -3)→ 3
与传统除法 + (int) 强转的区别
传统写法如 (int)(10 / 3) 看似等效,但存在隐患:
- 浮点中间结果可能因精度丢失导致错误截断(例如大数:`(int)(PHP_INT_MAX / 2)` 可能不准确)
- 负数行为不一致:
(int)(-10 / 3)在某些 PHP 版本或架构下可能得 -4(因 -3.333… 向负无穷截断),而intdiv始终保证向零取整 - 类型不安全:
/总是返回 float,即使操作数是 int
替代 floor($a / $b) 的场景需谨慎
若你原本用 floor($a / $b) 实现“向下取整除法”(如计算页码、分组索引),intdiv 不等价:
-
floor(-10 / 3)→ -4(向下取整) -
intdiv(-10, 3)→ -3(向零取整)
需要向下取整时,仍应使用 floor($a / $b) 或自定义逻辑,不要误用 intdiv。
实际建议
- 明确要“数学整除(商为整数,余数非负)”时,优先用
intdiv+%配合(注意:%在 PHP 中符号随被除数,而intdiv符号规则统一) - 做数组分页、块索引等正数场景,
intdiv($offset, $size)比(int)($offset / $size)更安全可靠 - 传参前确保变量是整数类型,必要时用
(int)$var显式转换,避免类型错误
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











