编写一个函数让数字保留指定整数和小数位数,【不足补零】!
比如:(defun lsd_format (a b c /)
...
)
a=3.1
b=2(整数位数)
c=3(小数位数)
程序输出:03.100
a=133.1183
b=2(整数位数)
c=3(小数位数)
程序输出:33.118
这个程序怎么写啊?!!
本帖最后由 Gu_xl 于 2011-2-10 18:11 编辑
(defun lsd_format (a b c / dimzin n)
(setq dimzin (getvar "dimzin"))
(setvar "dimzin" 0)
(setq a (rtos a 2 c))
(setq n (VL-STRING-SEARCH "." a))
(if n
(if (>= b n)
(repeat (- b n) (setq a (strcat "0" a)))
(setq a (substr a (- n b -1) ))
)
(if (>= b (strlen a))
(repeat (- b (strlen a)) (setq a (strcat "0" a)))
(setq a (substr a (- (strlen a) b -1) ))
)
)
(setvar "dimzin" dimzin)
a
)
本帖最后由 ZZXXQQ 于 2011-2-11 20:11 编辑
(defun lsd_format (a b c / dimzin aa i)
(setq dimzin (getvar "dimzin"))
(setvar "dimzin" 0)
(setq a (/ a (expt 10.0 b)))
(setq aa (* (- a (fix a)) (expt 10 b)))
(setq a (rtos aa 2 c))
(setq i 1)
(repeat (1- b)
(if (< aa (expt 10 (- b i))) (setq a (strcat "0" a)))
(setq i (1+ i))
)
(setvar "dimzin" dimzin)
a
)
回复 ZZXXQQ 的帖子
(lsd_format2 3 4) 返回000.0000 ,将 (expt 10 b) 改为(expt 10. b),避免整整相除为0的情况! 请问版主:
在cad图形中,有些数据带有小数,我想修改成指定小数的位数,用lsp语句要如何编辑?
如下图:
例如,我要将所有的原来有3位小数的数据改到2位,或者是整数。
数据的属性为:选择对象: ((-1 . <图元名: 7ef9ac78>) (0 . "TEXT") (330 . <图元名: 7ef97cc0>) (5
. "318FF") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "dgx") (6 .
"Continuous") (100 . "AcDbText") (10 491172.0 4.38832e+006 1660.37) (40 .
4.80107) (1 . "1660.371") (50 . 2.1188) (41 . 0.8) (51 . 0.0) (7 . "HZ") (71 .
0) (72 . 4) (11 491163.0 4.38833e+006 1660.37) (210 0.0 0.0 1.0) (100 .
"AcDbText") (73 . 0) (-3 ("SOUTH" (1000 . "201200"))))
请指教
谢谢
回复 461045462 的帖子
(defun c:tt(/ ss n nn txt enl en dimzin)
(setq nn (getint "\n保留小数点位数<2>:"))
(if (null nn) (setq nn 2))
(setq dimzin (getvar "dimzin"))
(setvar "dimzin" 0)
(setq ss (ssget "x" '((0 . "text") (1 . "*#*"))))
(if ss
(progn
(Setq n 0)
(repeat (sslength ss)
(setq en (ssname ss n)
txt (cdr (assoc 1 (setq enl (entget en))))
n (1+ n)
)
(if (or (= 'real (type (read txt)))
(= 'int (type (read txt)))
)
(progn
(setq txt (rtos (read txt) 2 nn))
(setq enl (subst (cons 1 txt) (assoc 1 enl) enl))
(entmod enl)
)
)
)
)
)
(setvar "dimzin" dimzin)
(princ)
)
回复 Gu_xl 的帖子
谢谢版主
收藏了,运行后,正是我需要的
好好学习,领会领会
祝兔年吉祥如意! 回复 Gu_xl 的帖子
谢谢斑竹,收藏了。要好好学习
祝你兔年吉祥如意,恭喜发财 回复 Gu_xl 的帖子
请问版主,系统变量dimzin是控制什么的,在帮助文件里说是:控制主单位的消零处理
不是很明白,请指教。
另外有没有一个关于系统变量的详细教程,谢谢! 本帖最后由 Gu_xl 于 2011-2-12 10:50 编辑
回复 chengx2000 的帖子
具体的系统变量用法德看cad的帮助文件!
下面是cad对dimzin变量的具体描述
DIMZIN 概念 操作步骤 快速参考
类型: 整数
保存位置: 图形
初始值: 0
控制对主单位值的消零处理。当在命令行中输入或在“注释”对话框的“主单位”区域中设置时,DIMZIN 将存储此值。DIMTZIN 的值为 0 到 3 时只影响英尺-英寸标注。
0
消除零英尺和零英寸
1
包含零英尺和零英寸
2
包含零英尺,消除零英寸
3
包含零英寸,消除零英尺
4
消除十进制标注中的前导零(例如,0.5000 变为 .5000)
8
消除十进制标注中的后续零(例如,12.5000 变为 12.5)
12
消除前导零和后续零(例如,0.5000 变为 .5)
DIMZIN 还影响 AutoLISP rtos 和 angtos 函数执行的实数-字符串转换。