I tried several ways:
<script>
var floor = Math.floor;
var time1 = +new Date();
var n = 586;
var m = 18;
for (var h=1.01, i = 5000000; i--;) {
Math.round(n/m) * m;
}
console.log("Math.round:" + (+new Date() - time1));
time1 = +new Date();
for (var h=1.01, i = 5000000; i--;) {
if (n%m < m/2) {
Math.floor(n/m) * m;
} else {
Math.ceil(n/m) * m;
}
}
console.log("Math.floor/ceil:" + (+new Date() - time1));
time1 = +new Date();
for (var h=1.01, i = 5000000; i--;) {
Math[n%m < m/2 ? 'floor' : 'ceil'](n/m) * m;
}
console.log("Shorter Math.ceil/floor:" + (+new Date() - time1));
time1 = +new Date();
for (var h=1.01, i = 5000000; i--;) {
if (n%m < m/2) {
~~(n/m) * m;
} else {
~~(n/m + 1) * m;
}
}
console.log("Bitwise1:" + (+new Date() - time1));
time1 = +new Date();
for (var h=1.01, i = 5000000; i--;) {
~~(n/m + 0.5) * m;
}
console.log("Bitwise2:" + (+new Date() - time1));
time1 = +new Date();
for (var h=1.01, i = 5000000; i--;) {
lessOne = n-(n%m);
moreOne = lessOne + m;
if((n-lessOne) < (moreOne - n)) {
} else {
}
}
console.log("lessOne/moreOne:" + (+new Date() - time1));
</script>
Result:
Math.round:188
Math.floor/ceil:215
Shorter Math.ceil/floor:381
Bitwise1:171
Bitwise2:135
lessOne/moreOne:120
source
share