如何评估C#中可以除以零的字符串表达式?

时间:2016-09-08 03:31:12

标签: c# expression eval dividebyzeroexception

我在C#中面临一个奇怪的问题,我需要评估一些数学字符串表达式,它可以除以AND date(created) between '2016-09-06' AND '2016-09-07' 。这是一个例子:

0

我目前正在使用NCalc库来评估此表达式,如果当前表达式中的string expression = GetUserInput(); // Example: "(x + y) / z", where z may equal to 0 参数为DivideByZeroException,则会抛出z

我尝试通过执行以下操作来捕获异常:

0

但是,我需要以节省时间的方式评估此表达式超过6000次(使用不同的变量),因此每次捕获异常会显着减慢我的应用程序。

我有多个这样的表达式,每个表达式都是由用户输入的。我不知道给定的表达式是否试图除以零。

有没有办法以“安全”的方式评估C#中的数学表达式,其中尝试除以try { string formula = GetUserInput(); Expression exp = new Expression(formula); // ... exp.Evaluate(); // Throws a DivideByZeroException } catch (DivideByZeroException e) { //ignored } 将返回静态数字(0或无穷大),而不会抛出异常?

2 个答案:

答案 0 :(得分:3)

尝试使您的值浮点。

  

尝试将整数或十进制数除以零会抛出DivideByZeroException异常。要防止异常,请确保具有整数或十进制值的除法运算中的分母不为零。   将浮点值除以零并不会引发异常;根据IEEE 754算法的规则,它产生正无穷大,负无穷大或不是数字(NaN)。因为以下示例使用浮点除法而不是整数除法,所以该操作不会抛出DivideByZeroException异常。

https://msdn.microsoft.com/en-us/library/system.dividebyzeroexception.aspx

答案 1 :(得分:0)

评估z。如果z> 0然后执行操作,否则转到下一个评估。