You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP整数向上取整异常:期望得20却返回21的技术问询

解决PHP向上取整到20的问题,以及为啥会返回21

为啥会得到21?

先说说你遇到的返回21的问题——大概率是你对ceil()函数的用法或者自己的需求逻辑搞混了:

  • 如果你直接写了$total = ceil($price);,而你的$price刚好是21,那ceil()肯定返回21啊!因为ceil()的作用是返回大于等于输入值的最小整数,21本身就是整数,完全符合要求,自然不会有任何调整。
  • 要是你尝试写了自定义的取整逻辑但写错了,也可能意外得到21,但最常见的情况就是你以为ceil()能帮你直接调到目标值20,但它其实只会往整数方向上取,不是往你指定的固定值上靠。

怎么实现“向上取整到20”的预期效果?

得先明确你到底要哪种效果,我给你列几种常见场景的实现方案:

场景1:小于20的数都拉到20,大于等于20的保持原样

如果你希望只要数值不够20就提到20,够了就不动,用max()函数最省心:

$price = 15; // 示例输入
$total = max($price, 20);
// 输出结果:20

$price = 21;
$total = max($price, 20);
// 输出结果:21(要是你想大于20也强制转20,看下面的场景3)

场景2:向上取整到最近的20的倍数(比如1→20,21→40,40→40)

要是你要的是把任何数往上凑到最近的20的倍数(比如21要变成40),那用ceil()配合除法乘法就行:

$price = 15;
$total = ceil($price / 20) * 20;
// 输出结果:20

$price = 21;
$total = ceil($price / 20) * 20;
// 输出结果:40

$price = 20;
$total = ceil($price / 20) * 20;
// 输出结果:20

场景3:不管原数多大,直接返回20

要是你就是想所有情况都得到20,那直接赋值就完事儿了:

$total = 20;

总结

先搞清楚自己具体要哪种逻辑,再选对应的方法。之前得到21,基本就是因为你直接对21用了ceil(),或者误解了“向上取整到20”的准确含义~

内容的提问来源于stack exchange,提问作者Q8root

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:54:34