| 07-19-2010, 10:47 AM | #1 |
Rounds a real to the closest integer multiple of another real. Code:
function RoundTo takes real base, real interval returns real
local real a
local real b
local real baseSign = RSignBJ(base)
local integer period
if (interval == 0.) then
return 0.
endif
if (interval < 0.) then
set interval = -interval
endif
set base = baseSign * base
set period = R2I(base / interval)
set a = period * interval
set b = (period + 1) * interval
if (base - a < b - base) then
return (baseSign * a)
endif
return (baseSign * b)
endfunction |
| 07-19-2010, 11:29 AM | #2 |
How about this: JASS:function RoundTo takes real base, real interval returns real if interval==0.0 then return 0.0 endif set base=base/interval if base<0.0 then return R2I(base-0.5)*interval endif return R2I(base+0.5)*interval endfunction JASS:function RoundTo takes real base, real interval returns real if interval==0.0 then return 0.0 elseif base*interval<0.0 then return R2I(base/interval-0.5)*interval endif return R2I(base/interval+0.5)*interval endfunction |
| 07-19-2010, 11:54 AM | #3 |
Works too, I guess. Did not think of the shifted truncate functionality of R2I with 0.5. |
