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

如何在PHP中将整数向下取整至最接近的3的倍数(小于3时取0)

在PHP中实现整数向下取整至最近3的倍数的方案

嘿,这个需求其实挺容易实现的,我给你分享几个实用的方法,都能完美满足你的要求——小于3的数取0,其他数向下取整到最近的3的倍数:

方法1:用整数除法(推荐,PHP7+)

这个方法利用PHP的intdiv()函数做整数除法,它会直接舍去小数部分,然后再乘以3就能得到目标值。而且天然处理了小于3的数(除以3得到0,乘3就是0),完全符合你的需求。

function floorToMultipleOfThree(int $num): int {
    return intdiv($num, 3) * 3;
}

// 测试验证
echo floorToMultipleOfThree(4);  // 输出 3
echo floorToMultipleOfThree(10); // 输出 9
echo floorToMultipleOfThree(9);  // 输出 9
echo floorToMultipleOfThree(8);  // 输出 6
echo floorToMultipleOfThree(2);  // 输出 0
echo floorToMultipleOfThree(0);  // 输出 0

这个方法的优点是纯整数运算,没有浮点数精度问题,效率也最高,适合所有非负整数场景。如果需要处理负数(比如-4要得到-6),这个方法也能正确向下取整,比其他方法更准确。

方法2:用floor函数兼容旧版本(PHP5+)

如果你的项目还在使用PHP5(现在已经不推荐了,但还是提一下),可以用floor()函数配合浮点数运算,最后转成整数:

function floorToMultipleOfThree(int $num): int {
    return (int)(floor($num / 3) * 3);
}

// 测试结果和上面完全一致

floor()会把$num/3的结果向下取整,再乘以3就得到了最近的3的倍数。注意最后转成整数是为了避免浮点数的末尾小数问题(比如某些大数运算可能出现的.0情况)。

补充说明

两种方法都能完美覆盖你给出的测试用例,如果你只需要处理非负整数,选哪种都可以。但更推荐第一种整数除法的方案,逻辑更清晰,也没有浮点数潜在的精度风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:03:41