四捨五入する - lisp-cookbook-ja/common-lisp GitHub Wiki
四捨五入する
Common Lisp の round 関数は偶数丸めで四捨五入ではありません。 よって四捨五入をしたい場合は自作する必要があります。
簡単な実装例を示します。
;; その1
(defun nearest-1 (number)
(values (floor (+ 0.5 number))))
;; その2
;; number や divisor が負の時のことは考えていません
(defun nearest-2 (number &optional (divisor 1))
(if (>= (- number (* (floor number divisor) divisor)) (/ divisor 2))
(ceiling number divisor)
(floor number divisor)))
;; roundは以下のように 偶数方向へ丸められる
(round 10.5)
; => 10
; 0.5
(round 11.5)
; => 12
; -0.5