无if条件实现JavaScript中X向上取整为Y的倍数
修正向上取整到Y倍数的JavaScript公式(无if条件)
你的代码在x是y的整数倍时出错,原因是此时x%y等于0,导致计算式x + (y - x%y)等价于x + y,偏离了预期结果。以下是两种无需if条件的修正方案:
方案1:利用Math.ceil实现简洁写法
直接通过向上取整除法后再乘回y,能精准得到大于等于x的最小y倍数:
var x = 7; var y = 4; x = Math.ceil(x / y) * y; console.log(x); // 输出8
var x = 8; var y = 4; x = Math.ceil(x / y) * y; console.log(x); // 输出8
方案2:纯算术运算(不依赖Math对象)
通过调整运算逻辑,避免模为0时的额外累加:
var x = 7; var y = 4; x = Math.floor((x + y - 1) / y) * y; console.log(x); // 输出8
var x = 8; var y = 4; x = Math.floor((x + y - 1) / y) * y; console.log(x); // 输出8
原理:x + y - 1会让原本能被y整除的数,在除以y后取整结果不变;对非整倍数的数,则会向上“进位”,最终乘回y即可得到目标值。若追求更高效的整数取整,也可以用位运算| 0替代Math.floor(仅适用于正数场景):
x = ((x + y - 1) / y | 0) * y;
内容的提问来源于stack exchange,提问作者Dickens A S
相关产品推荐
相关产品推荐

