   (- n (mod n (:step scale))))
 
 (defn- round-up [scale n]
-  (+ n (- (:step scale) (mod (+ n) (:step scale)))))
+  (let [m (mod n (:step scale))]
+    (if (zero? m)
+      (BigDecimal. (str n))
+      (+ n (- (:step scale) (mod n (:step scale)))))))
 
 (defn- max-value [scale point]
   (let [n (+ (value point)

     (fn [point]
       (->> (first-point scale point)
            (iterate (next-point scale (max-value scale point)))
            (take-while some?)))))
  ([min max step offset below above]
   (scale-range {:min min :max max :step step}
                offset below above)))

    (test #'scale-index)
    (test #'next-step)
    (test #'scale-point)
    (test #'traversal-steps)
    (test #'round-up)
    (test #'round-down)))
