Я возился с созданием специальной функции округления, которая могла бы округляться до любого интервала, который я хотел. например (если я работал со степенями, округлял бы до ближайших 15 градусов). В любом случае я решил посмотреть, насколько быстро он сравнивается с Math.round и выясняется, что он медленнее. Я использую firebug на FF8
function R1(a,b){var c=a%b;return a-c+(c/b+1.5>>1)*b}
function R2(a){return Math.round(a)}
var i,e=1e5;
console.time('1');
i=e;
while(i--){
R1(3.5,1);
}
console.timeEnd('1');
console.time('2');
i=e;
while(i--){
R2(3.5);
}
console.timeEnd('2');
и мои результаты были
1: 464ms
2: 611ms
Я запускал их несколько раз по-разному, но всегда R1 выходил быстрее. Возможно, это всего лишь вещь FF, но если да, то что ее вызывает.
EDIT: Я взял каждый вызов функции, чтобы узнать, что произойдет
var i,e=1e5,c;
console.time('1');
i=e;
while(i--){
c=3.5%1;
3.5-c+(c/1+1.5>>1)*1;
}
console.timeEnd('1');
console.time('2');
i=e;
while(i--){
Math.round(3.5);
}
console.timeEnd('2');
и время, когда я получаю
1: 654ms
2: 349ms