我有这个工作的JavaScript函数,我想知道是否有更好的方法可以达到相同的结果。

function factorise(number, factor){
    if(factor === 0) return 0;
    return Math.round(number / factor) * factor;
}


现在,如果我希望将随机生成的100的数字除以3,我可以使用此函数。

factorise(100, 3); ---> 99

以下是一些其他示例:

factorise(27, 5); ---> 25

factorise(2095, 27); ---> 1206

如您所见,返回值包含传递给函数的因子编号的因子。但是我担心的是这种表现。在JavaScript游戏引擎的物理环境中运行它是否理想?最重要的是,我真的想为该函数起一个更好的名字。

最佳答案

可能代码不是您的瓶颈。但这是不使用浮点除法的替代方法。在Firefox上快10倍。



function factorise(number, factor) {
  if(factor === 0) return 0;
  var rem = number % factor;
  number -= rem;
  return 2*rem >= factor ? number+factor : number;
}
console.log(factorise(100, 3));   // 99
console.log(factorise(27, 5));    // 25
console.log(factorise(2095, 27)); // 2106





它假定数字为非负数,否则您将需要一些Math.abs

考虑删除大小写factor === 0并让它返回NaN

07-24 09:29