めもめも
round.clj
(defn half [x] (/ x 2))
(defn floor [value unit]
{:pre [(pos? unit)]}
(cond
(Double/isNaN value) value
(Double/isInfinite value) value
:else (let [q (quot value unit)]
(* unit (if (neg? (rem value unit))
(dec q) q)))))
(defn ceil [value unit]
(- (floor (- value) unit)))
(defn round [value unit]
(floor (+ value (half unit)) unit))
結果
(floor 3.7 2.5) ;2.5
(ceil 3.7 2.5) ;5.0
(round 3.7 2.5) ;2.5
(round 3.8 2.5) ;5.0
(floor 12.34 0.1);12.3