关于自定义数学公式的求值问题。
有一个特殊情况,需要用户先定义一个数学公式,变量名定死了(如为X,Y),用户可以任意设置这个公式,如可以设为X*13-44,或X+Y-23等等,我把这个公式以字符串形式保存在数据库中,然后在一个用户输入X,Y的值后可以从数据库中调出这个公式,求出这个公式的结果出来.问题是这个公式是字符串形式的,虽然用string.Replace方法把X,Y用真正的数字代替,但是代替之后还是字符串形式,如何把这个字符串的公式变成真正的公式而可以求出最后的结果出来?? 问题点数:50、回复次数:4Top
1 楼xhan2000(popeye.net)回复于 2003-06-01 01:04:36 得分 5
这个问题有意思
可以分多个字段存放
然后判断if(str=="*")A*B。。。Top
2 楼niwalker()回复于 2003-06-01 01:17:58 得分 5
你要编写一个解析器了,哈。去网络上找找,或许有。
自己写的话,需要构造一棵运算树(2叉树),然后分离数据和操作符,把分析的结果放入树中的节点,最后对树进行求值。
Top
3 楼lostinetdotcom(又一个MVP竞争者)回复于 2003-06-01 10:50:29 得分 30
http://www.lostinet.com/temp/calcparser/Example.aspxTop
4 楼mongtze(江南有情天)回复于 2003-06-01 12:56:53 得分 10
有一个VB函数是将字符串转换为公式的,我在ASP里用过。。。
是 Eval 函数
计算一个表达式的值并返回结果。
[result = ]Eval(expression)
参数
result
可选项。 是一个变量,用于接受返回的结果。如果未指定结果,应考虑使用 Execute 语句代替。
expression
必选项。可以是包含任何有效 VBScript 表达式的字符串。
说明
在 VBScript 中,x = y 可以有两种解释。第一种方式是赋值语句,将 y 的值赋予 x。第二种解释是测试 x 和 y 是否相等。如果相等,result 为 True;否则 result 为 False。Eval 方法总是采用第二种解释,而 Execute 语句总是采用第一种。
注意 在Microsoft(R) Visual Basic Scripting Edition 中不存在这种比较与赋值的混淆,因为赋值运算符(=)与比较运算符 (==)不同。
下面的例子说明了 Eval 函数的用法:
Sub GuessANumber
Dim Guess, RndNum
RndNum = Int((100) * Rnd(1) + 1)
Guess = CInt(InputBox("Enter your guess:",,0))
Do
If Eval("Guess = RndNum") Then
MsgBox "祝贺你!猜对了!"
Exit Sub
Else
Guess = CInt(InputBox("对不起,请再试一次",,0))
End If
Loop Until Guess = 0
End Sub
Top




