Auto CAD Lisp 之 数据类型转换函数详情

  • A+
所属分类:CAD二次开发

刚刚接触Lisp编程的小哥哥小姐姐们不知道如何把变量里面的数字变为字串符,或者把字串符转换成数字,或者数字四舍五入。下面贴出各个函数的使用和功能。

1、整型转换为字符串的函数  (itoa int)

例子 (itoa -2021)     返回    “-2021”

说明:把整型常数、变量或表达式的值转换为字符串,注意参数必须是整数,函数返回值中不带"+"号。

2、字符串转换为整数的函数 (atoi 字符串)

例子 :(atof "55.9") 返回 55   ,(atof "1997") 返回 1997

说明:把字符串常数、变量或表达式转换为整数。该函数从头扫描字符串,把前面的整数取出作为函数值返回。如果字符串不是以数字打头,函数返回值为0

3、字符串转换为实数的函数  (atof 字符串)

例子 :(atof "197.1") 返回 197.1 ,(atof "6") 返回 6.0

说明:把字符串常数、变量或表达式转换为实数。 该函数从头扫描字符串,把前面的数取出作为函数值返回。如果字符串不是以数字打头,函数返回值为0.0。

4、整型转换为实型的函数 (float n)

例子 :

(float 6) 返回 6.0
(float 6.75) 返回 6.75

说明:把整型数据转换为实型。参数可以为整数或实数,函数返回值为实数。

5、实型转换为整型的函数 (fix n)

例子 :

(fix 6) 返回 6
(fix 6.7) 返回 6

说明:把常数、变量、表达式的值取整。
(1)参数可以为整数或实数,函数返回值为整数。
(2)取整是截断小数部分,而不是四舍五入。

6、整数和实数格式化函数 (rtos number [mode] [precision])

解释说明:

此函数将依据所给定的 modeprecisionAutoCAD UNITMODE 系统变量及DIMZIN尺寸变量来返回一字符串以表示 numbermode precision是整型数, 表示所选择的线性单位模式和精确度。AutoCAD 中所提供的mode 值如下:

 

RTOS 模式(number)            编辑格式

1                                          科学记数 (Scientific)

2                                           十进制 (Decimal)

3                                            工程 (尺和十进位寸) (Engineering)

4                                           建筑 (尺和分数寸) (Architectural)

5                                            任意的分数单位 (Fractional)

把整数或实数按照指定的显示方式"mode"和精度"presicion"四舍五入转换为字符串。
(1)参数"number"可以为整型或实型常数、变量或表达式。
(2)参数"mode"为线性单位的格式编码,与AutoCAD的Units命令设定的线性格式相对应。如果该变量没有指定,则采用系统变量"lunits"指定的当前线性单位格式。
(3)参数"precision"用来指定数值的显示精度。对于前三种格式,本参数用来指定小数点后的小数位数。对于后两种格式,用来设定最小分数的分母。如果该变量没有指定,则采用系统变量Luprec设定的当前精度值。

例子:

例如, 我们设定 DIMZIN=0。则:   

语法范 UNITMODE=0的返回值 UNITMODE=1的返回值
(rtos 17.5 1 4) "1.7500E+01" "1.7500E+01"
(rtos 17.5 2 2) "17.50" "17.50"
(rtos 17.5 3 2) "1'-5.50"" "1'5.50""
(rtos 17.5 4 2) "1'-5 1/2"" "1'5-1/2""
(rtos 17.5 5 2) "17 1/2" "17-1/2"

6、距离格式化函数 (distof string [mode])

说明:

此函数会以angle 根据 mode 所指定的显示格式将string转换成实型数值。mode 参数所指定的单位必须是现存的格式。它的值必须是与 AutoCAD 的系统变量 LUNITS 所允许的值一致, 如下表所示。如果 mode 被省略, angtof 将使用 LUNITS 目前使用的值。

模式值 字串格式
1 科学记数格式
2 十进位格式
3 工程格式(英尺与十进位英寸)
4 建筑格式(英尺与分数英寸)
5 分数格式

string 必须是一个 distof 可以依据指定 mode 来正确分析的字符串。它可以是一个与rtos返回值相同的格式, 或许是 AutoCAD 允许键盘键入的格式。如果传送 distof经过 rtos 所建立的字符串, 那么distof将保证返回一有效值。如果distof成功执行, 那么它将返回一实型数值。否则, 它将返回 nil

把距离串按照指定的格式"mode"转换为实数。
(1)参数"string"必须是根据"mode"参数指定的距离测量格式能正确解释的字符串。
(2)参数"mode"为距离测量格式,与AutoCAD的Units命令设定的线性格式相对应(表6-4)。如果该变量没有指定,则采用系统变量"lunits"指定的当前单位设置。

7、角度格式化函数(弧度转为角度)  (angtos angle [mode] [precision])

说明:把以弧度为单位的角度按照指定的角度格式"mode"和精度"presicion"转换为字符串,角度值在[0,2π]之间。 (1)参数"angle"可以为整型或实型常数、变量或表达式。
(2)参数"mode"为角度格式编码,与AutoCAD的Units命令设定的角度格式相对应。如果该变量没有指定,则采用系统变量"aunits"指定的当前角度格式。
(3)参数"precision"用来指定转换后小数点之后的小数位数。如果该变量没有指定,则采用系统变量"auprec"设定的当前精度值。

例子:

(angtos 0.785398 0 4) 返回 "45.0000”
(angtos -0.785398 0 4) 返回 "315.0000"

8、角度格式化为弧度函数(角度转为弧度) (angtof string [units])

说明:把格式化角度字符串转换为以弧度为单位的实数。
(1)参数"string"必须是能够由Angtof函数根据指定的"units"参数进行正确分析的一个字符串。它既可以与Angtos函数返回结果的格式相同,也可以是AutoCAD允许从键盘输入的角度格式。
(2)参数"units"用于指定角度字符串格式单位,与AutoCAD的Units命令设定的角度格式相对应。如果该变量没有指定,则采用系统变量"aunits"指定的当前角度格式。

模式       编辑格式

0          十进位度

1          度/分/秒

2          百分级数

3            弧度

4           测量单位

例子:

(angtof "45.0000") 返回 0.785398

(angtof "45.0000" 3) 返回 1.0177

9、单位换算函数  (cvunit value from-unit to-unit)

说明:

把数值由一种单位格式转换为另一种单位格式。 (1)参数"value"为要换算的数值或点表(二维或三维点),必须是整型或实型,不得为空。
(2)参数"from-unit"为"value" 原来使用的单位。"to-unit"为"value"将要使用的单位,这两个单位必须在 ACAD.unt 文件中已经定义。
(3)转换的两种单位必须为同一类型,否则函数值为nil。
(4)如果要把一批数值从一个单位转换为另一个单位,可以先转换数值 1.0,然后将结果作为函数或计算中的缩放比例因子,从而提高效率。这种方法对除温度外的所有预定义单位都有效,因为温度单位的转换要涉及到一个偏移量而没有固定的比例

例子:

(cvunit 1 "minute" "second") 返回 60.0
(cvunit 1 "gallon" "furlong") 返回 nil
(cvunit 1.0 "inch" "cm") 返回 2.54
(cvunit 1.0 "acre" "sq yard") 返回 4840
(cvunit '(1.0 2.5) "ft" "in") 返回 (12.0 30.0)
(cvunit '(1 2 3) "ft" "in") 返回 (12.0 24.0 36.0)

10、任意数值转换字符串 (vl-princ-to-string 任意值)

说明:此函数可以将任意的数值转换成字符串,(alert "")这个弹窗只支持字符串。我们想要看到编程运行的结果,就可以使用这个函数加弹窗,弹窗来结果是什么,无论是表,还是字符串,还是数组,都会转为字符串。

例子

(alert (vl-princ-to-string 任意值))

 

11、(read string)

说明:

此函数将返回 string 的第一个表或原子。但 string 不可以包含空格, 除非是在表或字符串中 。read 会返回它的参数转换的相对应数据类型。

Lisp 四舍五入(没有直接的函数,可以自定义一个)

例子

(read (rtos 1.251 2 1));(read (rtos 小数 模式 保留位数)) 四舍五入

(read "97 3.2")  返回  97

(read "3.2300")  返回  3.23

(read "hello there") 返回  HELLO

(read "(a b c)") 返回  (A B C)

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: