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
相关产品推荐
相关产品推荐

