全新的 NCalc。
我有一个要评估的公式,我得到了一些意想不到的(对我来说)结果。
使用的 @T_No_Starters 参数 = 12。
如果公式为 if (@T_No_Starters >= 8 ,'T','F')
Result FALSE
如果公式if (@T_No_Starters >= 8.0 ,'T','F')
结果为 TRUE
如果公式if (@T_No_Starters >= 10 ,'T','F')
结果为 TRUE
我不确定发生了什么,为什么 8 为假而 8.0 为真但 10 又是一个整数是真?如何确保评估始终正确?我要把每个数字都变成十进制吗?我可以设置参数类型之类的东西吗?当我输入我的参数?
下面是我用来达到上述目标的测试代码。
Private Sub Button40_Click(sender As Object, e As EventArgs) Handles Button40.Click
Dim FormulaLine As String = "if (@T_No_Starters >= 8 ,'T','F')"
Dim Parms As New Dictionary(Of String, String)
Parms.Add("T_No_Starters", 12)
Dim OurAnswer = FormulaCalculator.MSGBOXEval(FormulaLine, Parms)
End Sub
Function MSGBOXEval(Formula As String, Parms As Dictionary(Of String, String))
Try
Dim X As New Expression(Formula)
For Each key As String In Parms.Keys
X.Parameters.Add(key, Parms.Item(key))
Next
Dim result = X.Evaluate
MessageBox.Show(result)
Return result
Catch ex As Exception
MessageBox.Show(ex.Message)
Return "Error " & ex.Message
End Try
Return 0
End Function
我最好不要将公式中的值更改为十进制。大于或等于 8 个启动器而不是 8.0。只是看起来不太对。参数字典是字符串和字符串,我必须使用它,因为有些是字符串。是否像在需要值时确保参数是值一样简单?