・ 切捨て 切上げ 四捨五入
・ 実数値を丸める
;////////////////////////////////////////////////////////////////////////////////
;実数値を指定した有効桁で丸める (切捨て 切上げ 四捨五入)
By Kamijo
;////////////////////////////////////////////////////////////////////////////////
(defun Jo_marume ( / real_a n )
(defun Jof_r_dn ( real_a n );切捨て;
(/ (float (fix (* (expt 10 n) (atof (rtos real_a 2 (1+ n)))))) (expt 10 n))
)
(defun Jof_r_up ( real_a n);切上げ;
(/ (float (fix (1+ (* (expt 10 n) (atof (rtos real_a 2 (1+ n))))))) (expt 10 n))
)
(defun Jof_round (real_a n / fix_a );四捨五入;
(setq real_a (* (expt 10 n) real_a ))
(setq fix_a (fix real_a))
(setq real_a (- real_a fix_a))
(setq real_a (if (< real_a 0.5) 0.0 1.0))
(setq real_a (/ (+ fix_a real_a) (expt 10 n)))
)
(defun Jof_marume (real_a n);rtosで丸める;
(atof (rtos real_a 2 n ))
)
(setq real_a (getreal "\n実数を入力"))
(initget "1 2 3 4")
(setq kw (getkword "\n1=切捨て / 2=切上げ / 3=四捨五入 / 4=RTOS :"))
(setq n (getint "\n小数点以下 有効桁:"))
(cond
((= kw "1") (setq real_a (Jof_r_dn real_a n)))
((= kw "2") (setq real_a (Jof_r_up real_a n)))
((= kw "3") (setq real_a (Jof_round real_a n)))
((= kw "4") (setq real_a (Jof_marume real_a n)))
)
(princ "\n")
(princ real_a)
(princ)
)
Jof_round と Jof_marume は同じ値が返ってくるようです
どうも(rtos)は四捨五入をしているようですね
ちなみに、計算誤差を修正するために、システム変数 LUPREC
で丸めるには桁数を指定しないで
(atof (rtos real_a))
とします