自贡黄明儒 发表于 2022-9-20 07:52:05

数值圆整

本帖最后由 自贡黄明儒 于 2022-9-20 08:03 编辑

今天帮人写了一程序,要求: 个位数字小于2时,舍去;3~7时变为5;大于7时,进位
这种进位方式误差不超过3mm,采用四舍五入误差会更大一些
与vbs上很多进位方式也是不同的。
实际工作中,个位数5或者0,也便于下料看尺寸
这个适合练手。。。
;;(_MyNumRound 32.5)==>30
;;(_MyNumRound 37.5)==>35
;;(_MyNumRound 38.5)==>40
**** Hidden Message *****

菜卷鱼 发表于 2022-9-20 15:09:10

liuhe 发表于 2022-9-20 10:04
大佬,你帮别人写插件 收费么?不方便说也没关系。只是最近没啥动力玩下去了,工作需求基本满足了

我半小时写个程序收别人5块钱别人都觉得不划算

llsheng_73 发表于 2022-9-23 08:42:49

本帖最后由 llsheng_73 于 2022-9-26 00:36 编辑

凑个热闹
(defun fixn(a n / b)(if(zerop(setq b(rem a n)))a(*(+(/(- a b 0.)n)(if(<(+ b b)n)0 1))n)))
(fixn 10.7 0.5)
10.5
_$ (fixn 10.3 0.5)
10.5
_$ (fixn 10.2 0.5)
10.0
_$ (fixn 9.8 0.5)
10.0
_$ (fixn 1053.5 5)
1055.0
_$ (fixn 1052 5)
1050.0
其实这个的真正用法是应该是下边这样

(mapcar'(lambda(x)(fixn x 32))'(15 33 79 124 148))
(0.0 32.0 64.0 128.0 160.0)
_$ (mapcar'(lambda(x)(fixn x 7))'(15 33 79 124 148))
(14.0 35.0 77.0 126.0 147.0)
_$ (mapcar'(lambda(x)(fixn x 13))'(15 33 79 124 148))
(13.0 39.0 78.0 130.0 143.0)
_$ (mapcar'(lambda(x)(fixn x 27))'(15 33 79 124 148))
(27.0 27.0 81.0 135.0 135.0)
更多的时候会涉及小数

(mapcar'(lambda(x)(fixn x 0.3))'(1.5 3.3 7.9 12.4 14.8))
(1.5 3.3 7.8 12.3 14.7)

(mapcar'(lambda(x)(fixn x 0.02))'(1.55 3.213 7.899 12.313 14.819))
(1.56 3.22 7.9 12.32 14.82)



xtjd 发表于 2022-9-20 09:21:53

本帖最后由 xtjd 于 2022-9-20 14:23 编辑

;黄总代码改用wcmatch法
(defun t1(num / a)
(setq a(itoa(fix num)))
(+(*(atoi(substr a 1(1-(strlen a))))10)
    (cond
      ((wcmatch a "*") 0)
      ((wcmatch a "*") 5)
      (t 10)
    )
)
)

tigcat 发表于 2022-9-20 08:15:24

黄老大早就发布实用函数啦

czb203 发表于 2022-9-20 08:28:40

黄老大早就发布实用函数啦

USER2128 发表于 2022-9-20 09:12:52

感谢黄大师分享程序!

229096767 发表于 2022-9-20 09:22:14

感谢分享      

ymcui 发表于 2022-9-20 09:24:51

感谢黄大师分享程序!

434939575 发表于 2022-9-20 09:49:26

虽然用不上,还是要向大佬学习。

ht1480 发表于 2022-9-20 09:50:28

liuhe 发表于 2022-9-20 10:04:19

大佬,你帮别人写插件 收费么?不方便说也没关系。只是最近没啥动力玩下去了,工作需求基本满足了
页: [1] 2 3 4
查看完整版本: 数值圆整