明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5804|回复: 20

[函数] 编写一个函数让数字保留指定整数和小数位数,【不足补零】!

  [复制链接]
发表于 2011-2-10 13:31 | 显示全部楼层 |阅读模式
比如:
(defun lsd_format (a b c /)
...
)

a=3.1
b=2(整数位数)
c=3(小数位数)
程序输出:03.100

a=133.1183
b=2(整数位数)
c=3(小数位数)
程序输出:33.118

这个程序怎么写啊?!!

本帖被以下淘专辑推荐:

发表于 2011-2-10 18:04 | 显示全部楼层
本帖最后由 Gu_xl 于 2011-2-10 18:11 编辑

  1. (defun lsd_format (a b c / dimzin n)
  2.   (setq dimzin (getvar "dimzin"))
  3.   (setvar "dimzin" 0)
  4.   (setq a (rtos a 2 c))
  5.   (setq n (VL-STRING-SEARCH "." a))
  6.   (if n
  7.     (if (>= b n)
  8.       (repeat (- b n) (setq a (strcat "0" a)))
  9.       (setq a (substr a (- n b -1) ))
  10.       )
  11.     (if (>= b (strlen a))
  12.       (repeat (- b (strlen a)) (setq a (strcat "0" a)))
  13.       (setq a (substr a (- (strlen a) b -1) ))
  14.       )
  15.     )
  16.   (setvar "dimzin" dimzin)
  17.   a
  18. )


发表于 2011-2-10 20:51 | 显示全部楼层
本帖最后由 ZZXXQQ 于 2011-2-11 20:11 编辑

游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0
发表于 2011-2-10 22:55 | 显示全部楼层
回复 ZZXXQQ 的帖子

(lsd_format  2 3 4) 返回000.0000 ,将 (expt 10 b) 改为(expt 10. b),避免整整相除为0的情况!
发表于 2011-2-11 08:41 | 显示全部楼层
请问版主:
在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"))))
请指教
谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-2-11 12:25 | 显示全部楼层
回复 461045462 的帖子

  1. (defun c:tt(/ ss n nn txt enl en dimzin)
  2.   (setq nn (getint "\n保留小数点位数<2>:"))
  3.   (if (null nn) (setq nn 2))
  4.   (setq dimzin (getvar "dimzin"))
  5.   (setvar "dimzin" 0)
  6.   (setq ss (ssget "x" '((0 . "text") (1 . "*#*"))))
  7.   (if ss
  8.     (progn
  9.       (Setq n 0)
  10.       (repeat (sslength ss)
  11. (setq en (ssname ss n)
  12.        txt (cdr (assoc 1 (setq enl (entget en))))
  13.        n (1+ n)
  14.        )
  15. (if (or (= 'real (type (read txt)))
  16.   (= 'int (type (read txt)))
  17.   )
  18.    (progn
  19.    (setq txt (rtos (read txt) 2 nn))
  20.    (setq enl (subst (cons 1 txt) (assoc 1 enl) enl))
  21.    (entmod enl)
  22.    )
  23.    )
  24. )
  25.       )
  26.     )
  27.   (setvar "dimzin" dimzin)
  28.   (princ)
  29.   )

发表于 2011-2-11 16:01 | 显示全部楼层
回复 Gu_xl 的帖子

谢谢版主
收藏了,运行后,正是我需要的
好好学习,领会领会
祝兔年吉祥如意!
发表于 2011-2-11 16:12 | 显示全部楼层
回复 Gu_xl 的帖子

谢谢斑竹,收藏了。要好好学习
祝你兔年吉祥如意,恭喜发财
发表于 2011-2-12 08:23 | 显示全部楼层
回复 Gu_xl 的帖子

请问版主,系统变量dimzin是控制什么的,在帮助文件里说是:控制主单位的消零处理
不是很明白,请指教。
另外有没有一个关于系统变量的详细教程,谢谢!
发表于 2011-2-12 10:46 | 显示全部楼层
本帖最后由 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 函数执行的实数-字符串转换。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-5 04:04 , Processed in 0.169649 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表