.net 如何在下面的表达式中计算根

.net 如何在下面的表达式中计算根,.net,vb.net,.net,Vb.net,我有一个表达式v((P1*P46)/3600),其中P1来自一个文本框,P46来自另一个文本框 例如:v((2.0*3.2)/3600) 我怎么计算呢 这是我的密码: Private Function calculatevitalexpression(ByVal strformulla As String, ByRef numtxt As TextBox, ByRef dtable As DataTable) Try strformulla =v((2.0*3.2)/3600)

我有一个表达式
v((P1*P46)/3600)
,其中P1来自一个文本框,P46来自另一个文本框

例如:
v((2.0*3.2)/3600)

我怎么计算呢

这是我的密码:

Private Function calculatevitalexpression(ByVal strformulla As String, ByRef numtxt As TextBox, ByRef dtable As DataTable)
    Try
     strformulla =v((2.0*3.2)/3600)
        Dim Sc As New MSScriptControl.ScriptControl
        Sc.Language = "VBSCRIPT"
        strformulla = RemoveCharacter(strformulla, "P")
        Dim res As Double = Convert.ToDouble(Sc.Eval(strformulla))
        Dim result As Decimal = Math.Round(res, decimalplaces)
        numtxt.Text = result

     Finally
        'frmW.Close()
    End Try
End Function

要使用
ScriptControl
组件实现这一点,您必须通过
AddObject
将所有可能的输入值传递到控件中,以便脚本控件知道
P1
P46
是什么-例如(使用C#作为示例):

这将添加所有作为文本框的
p..
控件及其文本值的数字版本

注意:不要删除
p
(您的
RemoveCharacter
行)-否则脚本看到的都是
v((1*46)/3600)
-这根本不涉及您的输入

但是,有一些独立的表达式计算引擎可以完成这项工作,但是您仍然需要告诉它们外部值

foreach(var control in Controls) {
    if(control is TextBox &&
        control.Name.StartsWith("P"))
    { // ^^^ some crude way of finding the candidates
        Sc.AddObject(control.Name, double.Parse(control.Text), false);
    }
}