2016-09-21 63 views
0

我有一个要评估的公式“6 * 6 * 6 * 6 * 6 * 6 * 5 * 6 * 6 * 6 * 5 * 6 * 5”Ncalc返回= -1031662592答案应该是(我希望是)= 7558272000Ncalc公式评估为意想不到的结果

的代码是相当直截了当

Function StraightEval(Formula As String) 
    Try 
     Dim X As New Expression(Formula) 
     Dim result = X.Evaluate 
     Return result 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
     Return "Error " & ex.Message 
    End Try 

End Function 

任何想法的差异,以及如何解决它?我知道我可以编写自己的小函数来分割字符串,并在循环中进行数学运算,但我只是先问问题。

回答

1

我的想法是设置结果= 6 * 6 * 6 * 6 * 6 * 6 * 5 * 6 * 6 * 6 * 5 * 6 * 5会导致其限制溢出2,147,483,647,因为它似乎默认为整数,结果被解释为负数。

我相信

Function StraightEval(Formula As String) 
    Try 
     Dim X As New Expression(Formula) 
     Dim result as Long = X.Evaluate 
     Return result 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
     Return "Error " & ex.Message 
    End Try 

End Function 

将修复它。