floor() 在 php 8.1 中仍向负无穷取整、返回 float 类型,正数去小数(floor(7.9)→7.0),负数向下(floor(-7.1)→-8.0),整数原样返回(floor(42)→42.0);与 intval() 的关键区别在于负数处理:floor(-5.9) 为 -6.0,intval(-5.9) 为 -5。

floor() 在 PHP 8.1 中行为与之前版本一致,仍是向负无穷方向向下取整的标准函数,返回值类型为 float(即使结果是整数,也保持浮点类型)。
floor() 的核心规则
- 对任意实数
x,floor(x)返回 小于或等于 x 的最大整数。 - 正数:去掉小数部分(如
floor(7.9) → 7)。 - 负数:不是“去掉小数”,而是往更小方向走(如
floor(-7.1) → -8,因为-8 )。 - 整数:直接返回原值(如
floor(42) → 42.0)。
常见用法示例
基础取整
var_dump(floor(3.7)); // float(3) var_dump(floor(-3.7)); // float(-4) var_dump(floor(0.0)); // float(0) var_dump(floor(-0.1)); // float(-1)
处理小数位数(如保留两位小数并向下舍入)
$num = 12.3485; $result = floor($num * 100) / 100; // → 12.34
按百位向下取整(如 12345 → 12300)
$amount = 12345; $rounded = floor($amount / 100) * 100; // → 12300.0
注意类型:返回 float,不是 int
var_dump(gettype(floor(5))); // string(5) "double"(PHP 8.1 中 float 同义于 double) var_dump(is_int(floor(5))); // bool(false)
如需整型,可显式转换:(int)floor($x) 或 intval(floor($x)),但要注意负数截断差异(见下文)。
floor() 和 intval() 的关键区别(尤其负数)
| 表达式 | floor() 结果 | intval() 结果 | 说明 |
|---|---|---|---|
floor(5.9) |
5.0 |
5 |
两者一致 |
floor(-5.9) |
-6.0 |
-5 |
floor 向负无穷,intval 向零截断 |
⚠️ 若你本意是“截掉小数”,用
intval();若要“严格向下”,必须用floor()。
实际建议
- 不要依赖
floor()返回int类型,PHP 8.1 仍返回float。 - 遇到浮点精度问题(如
floor(0.1 + 0.2)可能因0.30000000000000004导致意外),先用round($x, 10)预处理再floor。 - 需要整数运算(如数组索引、循环计数),建议加
(int)强转,但确认逻辑兼容负数场景。
不复杂但容易忽略。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











