=== 关于变量替换用于计算的一个问题 ===
一直没搞清下面的情形该如何处理,请各位帮帮忙:
=====================
Dim NumCount, Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8 As Integer
Dim NumString As String
'把变化的变量(或是表字段)名称计算式存入NumString (注:是名称,且计算式是根据实际而变化的)
NumString = "Num2 + Num3 + 2 * Num4 - (Num5 + Num6) * 0.17 "
'然后对变量进行赋值
Num1 = 10
Num2 = 20
Num3 = 30
...
Num8 = 80
=====================
请问各位:如何取得 NumString 的计算值?
[解决办法]
有这个必要么?
你要分析这个字符串有哪些是变量,哪些是运算符号,哪些是数字,然后通过对应来进行计算。
例如
获取一个字符串如 "Num2 "
if 字符串 = "Num2 " then
结果变量 = Num2 等运算。
我觉得没有必要。
[解决办法]
你可以自已做一个表达式解析器,如果是计算机专业的话,那在编译原理里面是讲得清清楚楚的。
[解决办法]
呵呵,
[解决办法]
我也碰到过,我不会,等答案!
[解决办法]
不懂..帮顶
[解决办法]
我假设你的公式是这样的.
'NumString = "Num2 + Num3 + 2 * Num4 - (Num5 + Num6) * 0.17 "
'NumString = "Num1 * Num4 "
'NumString = "Num1 * 2+ Num3 / 2 "
然后循环判断
For i = 1 To Grid1.Rows - 1
For k = 0 To Grid1.Cols - 1
If j(i, k) <> 0 Then
Select Case k
Case 0
If j(i, k + 3) <> 0 Then
j(i, 6) = j(i, k) * j(i, k + 3)
Exit For
End If
If j(i, k + 2) <> 0 Then
j(i, 6) = j(i, k) * 2 + j(i, k + 2) / 2
Exit For
End If
Case 1
If j(i, k + 1) <> 0 And j(i, k + 2) <> 0 And j(i, k + 3) <> 0 And j(i, k + 4) <> 0 Then
j(i, 6) = j(i, k) + j(i, k + 1) + 2 * j(i, k + 2) - (j(i, k + 3) + j(i, k + 4)) * 0.17 '-
Exit For
End If
End Select
End If
Next
Next
你看行吗?是你要的吗?
[解决办法]
dim dt as new datatable()
dim NumString as string= "Num2 + Num3 + 2 * Num4 - (Num5 + Num6) * 0.17 "
dim cl1=new DataColumn( "Num1 ",getType(System.String))
dim cl2=new DataColumn( "Num2 ",getType(System.String))
dim cl3=new DataColumn( "Num3 ",getType(System.String))
dim cl4=new DataColumn( "Num4 ",getType(System.String))
dim cl5=new DataColumn( "Num5 ",getType(System.String))
dim cl6=new DataColumn( "Num6 ",getType(System.String))
dim result=new DataColumn( "result ",getType(System.String))
result.Expression=NumString
[解决办法]
定解:用堆栈的思想去做...
[解决办法]
楼主问题解决了吗?我现在也在解决和你这个类似的问题.也不清楚该怎么办.
------解决方案--------------------
Dim Vbs As New MSScriptControl.ScriptControl
Private Sub Command1_Click()
Vbs.Language = "vbs "
MsgBox Vbs.Eval( "1*2*233434 ")
End Sub
[解决办法]
http://www.newasp.net/tech/net/12348.html
看看,或许有帮助