# Round to Nearest via Modulus Division: A fun way to snap to a grid of numbers.

posted 2013-Feb-28

Whenever I want to round a number to the nearest *something-other-than-integer*—such as rounding to the nearest multiple of 20—I tend to use code like this:

function roundToNearest( number, multiple ){ return Math.round(number/multiple)*multiple; }

However, courtesy of *Programming in Lua* I offer you a different solution that does not invoke a function, but just uses operators:

function roundToNearest( number, multiple ){ var half = multiple/2; return number+half - (number+half) % multiple; }

In addition to being geeky fun, this can be over 30% faster in JavaScript.

It’s also about 30% faster in Lua as well:

require 'os' local c = os.clock function r1(i,n) return math.floor(i/n+0.5)*n end function r2(i,n) local m=n/2; return i+m - (i+m)%n end local t=c(); for i=1,12345678 do r1(i,20) end; print(c()-t) --> 2.007 local t=c(); for i=1,12345678 do r2(i,20) end; print(c()-t) --> 1.45

Phrogz
02:52PM ET 2017-Mar-20 |
Using Chrome v56 on Windows, today this is 86% faster than using |