etoxp 发表于 2015-1-16 21:57:41

关于用表达式定义变量的问题

一般可用(setq valName 1.123456789)的形式达定义变量的值。现在我想用表达式来定义变量,即前面的valName是可变的(可以由程序使用者自行命名),当然这个变量的值也可以自行定义,然后做成一个子程序。
(eval (read (strcat "(setq " varName " " (rtos varValue 2 5) " )")))这句基本可以达到我的要求,但这一语句中对于变量值varValue需要转换为字符串,这就使得在计算中可能产生不可忽略的误差。各位老大可否帮我优化一下?谢谢!!!

_$ (setq varName "a")
"a"

_$ (setq varValue 1.123456789)
1.12346

_$ (eval (read (strcat "(setq " varName " " (rtos varValue 2 5) " )")))
1.12346

_$ a
1.12346

_$ (+ a 1)
2.12346


aihuyujian 发表于 2015-1-16 22:29:42

(vl-princ-to-string varValue)

etoxp 发表于 2015-1-16 22:37:09

aihuyujian 发表于 2015-1-16 22:29 static/image/common/back.gif
(vl-princ-to-string varValue)

谢谢,但这个貌似也是先将数字做成字符串,但由该字符串还原成数字时就会丢失精度。有没有其它办法能保证精度吗?

vectra 发表于 2015-2-19 15:22:01

用 set 函数
页: [1]
查看完整版本: 关于用表达式定义变量的问题