・ 切捨て 切上げ 四捨五入
・ 実数値を丸める

;////////////////////////////////////////////////////////////////////////////////
;実数値を指定した有効桁で丸める (切捨て 切上げ 四捨五入)            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))

とします