数学表达式的字符串求值
RT,有诸如此类的字符串(setq str "35*2+3"),如何对该字符串求值?;;;字符串仅含有加减乘除(+-*/),数字有可能有小数点;;;除此之外字符串内无其他特殊符号
(setq str1 "35*2+1")
(setq str2 "25+1.5*3")
(setq str3 "25/5+35-3")
;;;希望得到的结果
(setq str1a 71)
(setq str2a 29.5)
(setq str3a 37)
本帖最后由 1291500406 于 2019-10-11 19:31 编辑
masterlong 发表于 2019-6-9 12:52
(cal ".....")
cal 的bug: 整数必须介于 -32768 和 32767 之间,否则会计算错误的结果
VbScript_eval 可以弥补, cal的不足
VbScript表达式计算代码是如下
a = Eval(35*2+1)
b = Eval(25+1.5*3)
c = Eval(25/5+35-3)
msgbox "a="&a& " b="&b& " c="&c
(defun VbScript_eval(expr)(or *SCR-ScriptControl(setq *SCR-ScriptControl
(vlax-create-object "Aec32BitAppServer.AecScriptControl.1"))
(setq *SCR-ScriptControl (vlax-create-object "ScriptControl")))
(vlax-put *SCR-ScriptControl 'language "VBScript")
(vlax-invoke *SCR-ScriptControl 'eval expr))
测试:
(setq str1a(VbScript_eval "35*2+1"))
71
(setq str2a(VbScript_eval "25+1.5*3"))
29.5
(setq str3a(VbScript_eval "25/5+35-3"))
37.0
(setq str1a(VbScript_eval "35000000*2+1"))
70000001
(setq str1a(cal "35*2+1")) 71
(setq str2a(cal "25+1.5*3")) 29.5
(setq str3a(cal "25/5+35-3")) 37.0(setq str1 (cal "35000000*2+1"))
7553
(cal ".....") 1291500406 发表于 2019-6-9 13:09
cal 的bug: 整数必须介于 -32768 和 32767 之间,否则会计算错误的结果
VbScript_
犀利,不过我这里提示变量保护了。所以我将下面的红色的eval换成其他变量了,这样子也貌似运行正常。可以吗?会不会有潜在的其他影响?
(defun VbScript_eval (expr / eval)
(or *SCR-ScriptControl
(setq *SCR-ScriptControl
(vlax-create-object "Aec32BitAppServer.AecScriptControl.1")
)
(setq *SCR-ScriptControl (vlax-create-object "ScriptControl"))
)
(vlax-put *SCR-ScriptControl 'language "VBScript")
(setq eval (vlax-invoke *SCR-ScriptControl 'eval expr))
)
本帖最后由 1291500406 于 2019-6-9 15:08 编辑
sysu-沼泽 发表于 2019-6-9 14:56
犀利,不过我这里提示变量保护了。所以我将下面的红色的eval换成其他变量了,这样子也貌似运行正常。可以 ...
只要得到返回值就行, 1291500406 发表于 2019-6-9 15:07
只要得到返回值就行,
好,多谢指导!
页:
[1]