sysu-沼泽 发表于 2019-6-9 12:38:54

数学表达式的字符串求值

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-6-9 13:09:25

本帖最后由 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



masterlong 发表于 2019-6-9 12:52:18

(cal ".....")

sysu-沼泽 发表于 2019-6-9 14:56:44

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:07:09

本帖最后由 1291500406 于 2019-6-9 15:08 编辑

sysu-沼泽 发表于 2019-6-9 14:56
犀利,不过我这里提示变量保护了。所以我将下面的红色的eval换成其他变量了,这样子也貌似运行正常。可以 ...
只要得到返回值就行,

sysu-沼泽 发表于 2019-6-9 15:12:46

1291500406 发表于 2019-6-9 15:07
只要得到返回值就行,

好,多谢指导!
页: [1]
查看完整版本: 数学表达式的字符串求值