- A+
刚刚接触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])
解释说明:
此函数将依据所给定的 mode、precision、AutoCAD 的UNITMODE 系统变量及DIMZIN尺寸变量来返回一字符串以表示 number。mode 与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)