如何将一个实数保留小数后2位 并四舍五入呢?
如何将一个实数保留小数后2位 并四舍五入呢?召唤各种大神~~帮帮小弟~~
Command: (rtos 12.34567 2 3)
"12.346"
Command: (rtos 12.34567 2 2)
"12.35"
Command: (rtos 12.34567 2 1)
"12.3" 本帖最后由 Gu_xl 于 2010-12-26 09:32 编辑
回复 icefrog 的帖子
;;;gxl-NumJD1 Num1 Jd 按数字修约原则
数字保留小数点位数
;|数字修约原则
1. “四舍六入五成双” 例:3.148-3.1,0.736-0.74,75.5-76
当测量值中被修约的数字是5,而其后还有数字时,进位。 如:2.451-2.5
一次修约。如:13.4748-13.47
|;
;(gxl-NumJD1 47.7451 2) 返回 47.75
;(gxl-NumJD1 47.745 2) 返回 47.74
;(gxl-NumJD1 47.7351 2) 返回 47.74
;(gxl-NumJD1 47.735 2) 返回 47.74
(defun gxl-NumJD1 (Num JD / Num1 Num2 Num3 a b c d)
(if (> Num 0)
(setq d 0.5)
(setq d -0.5)
)
(setq Num1 (expt 10. JD))
(setq Num2 (* Num1 10.)
Num3 (* 10. Num2)
)
(setq a (fix (* Num Num1))
b (fix (* Num Num2))
c (fix (* Num Num3))
)
(if (= (rem b 10) 5)
(if (/= (rem c 10) 0)
(/ (fix (+ (* Num Num1) d)) Num1)
(if (= (rem a 2) 0)
;;;直接四舍五入
;(/ (fix (+ (* Num Num1) d)) Num1)
(/ (fix (* Num Num1)) Num1)
;;;奇进偶不进
(/ (fix (+ (* Num Num1) d)) Num1)
)
)
(/ (fix (+ (* Num Num1) d)) Num1)
)
)
http://bbs.mjtd.com/thread-84780-1-1.html
最后一题的题目 试着把你的要求扩展一下。 学习!谢谢Gu_xl 还可以用判断长度的方法,也可以实现,这要看你的要求。。。 ;如下写法也可
(setvar "dimzin" 0) ;rtos时保留小数位数
(setvar "dimazin" 0) ;rtos时角度保留小数位数
(if (>= ed5-st 100.0)
(setq ed5-st (rtos ed5-st 2 1))
(setq ed5-st (rtos ed5-st 2 2))
) 谢谢楼上
学习了
7楼的方式使用较多
页:
[1]