icefrog 发表于 2010-12-26 08:45:45

如何将一个实数保留小数后2位 并四舍五入呢?

如何将一个实数保留小数后2位 并四舍五入呢?
召唤各种大神~~帮帮小弟~~

Andyhon 发表于 2010-12-26 09:11:30

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:30:36

本帖最后由 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)
    )
)

露水2 发表于 2010-12-26 13:00:28

http://bbs.mjtd.com/thread-84780-1-1.html
最后一题的题目 试着把你的要求扩展一下。

xhq1954425 发表于 2010-12-26 17:40:26

学习!谢谢Gu_xl

chpmould 发表于 2010-12-26 17:53:59

还可以用判断长度的方法,也可以实现,这要看你的要求。。。

自贡黄明儒 发表于 2010-12-26 19:18:19

;如下写法也可
(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))
    )

461045462 发表于 2010-12-27 08:58:27

谢谢楼上
学习了
7楼的方式使用较多
页: [1]
查看完整版本: 如何将一个实数保留小数后2位 并四舍五入呢?