我有这个工作的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
。