Taking Michael's approach and appling to my code, you get:
;;;ROUND BY
;;;ARG -> REAL to round, REAL to round by
;;;RET -> REAL
(defun rndby (r b / tmp)
(setq tmp (rem r b))
(cond ((>= tmp (* 0.5 b)) (+ r (- b tmp)))
(T (- r tmp))))
A fairly clean piece of code. -David