将浮点数舍入到最接近 <n> 的倍数?

Round a float to the nearest multiple of <n>?

如何将浮点值舍入到最接近“n”的倍数?

例如,将 21.673 四舍五入到最接近的 8 的倍数应该得到 24。

并且,将 21.673 四舍五入到最接近的 4 的倍数应该得到 20。

我需要 JavaScript 中的解决方案。

很简单

Math.round(value / n) * n

还有一个,稍微短一点,稍微faster:

const nearrestMultipleOfN = (N,n) => n*(N/n+0.5|0);

它似乎达到了预期的效果:

const nearrestMultipleOfN = (N,n) => n*(N/n+0.5|0);
 
 console.log(nearrestMultipleOfN(21.673,8));
 console.log(nearrestMultipleOfN(21.673,4));
.as-console-wrapper{min-height:100%}

如果您发现自己正在寻找 可被 n 整除且 不超过 N 的最大整数(即 return 6,当给定 8 时可被 3 整除),你可能会这样:

const nearrestMultipleOfN = (N,n) => n*(N/n|0);