If you go to multiply by 2 - round - division by 2 routes, you may get some (very small) numerical errors. You can do this using modto avoid this:
x = 16.625;
dist = mod(x, 0.5);
floorVal = x - dist;
newVal = floorVal;
if dist >= 0.25, newVal = newVal + 0.5; end
, , , .