这是我目前拥有的:

function getNearestMultipleOf(n, m) {
    return Math.round(n/m) * m;
}
console.log(getNearestMultipleOf(37,18)); //36

一位 friend 告诉我 Math.round 很昂贵,更有效的方法是使用模来检查 n 是否必须四舍五入并使用 Math.ceilfloor

你会怎么做?

最佳答案

为什么不使用 模块化 运算符和简单的 减法
http://jsfiddle.net/LCDy6/1/

function getNearestMultipleOf(n, m) {
    lessOne = n-(n%m);
    moreOne = lessOne + m;
   if((n-lessOne) < (moreOne - n))
        return lessOne;
    else
        return moreOne;
}
alert(getNearestMultipleOf(38,3));

关于optimization - 将 n 舍入为 m 的倍数的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5230041/

10-10 13:52