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

