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

How to evaluate a string expression in C# which can divide by zero?

我在 C# 中遇到一个奇怪的问题,我需要计算一些数学字符串表达式,这些表达式可能被 0 整除。这是一个例子:

string expression = GetUserInput(); // Example: "(x + y) / z", where z may equal to 0

我目前正在使用 NCalc 库来计算这个表达式,如果当前表达式中的 z 参数是 0.[=19=,它会抛出 DivideByZeroException ]

我尝试通过以下方式捕获异常:

try {
    string formula = GetUserInput();
    Expression exp = new Expression(formula);

    // ...

    exp.Evaluate(); // Throws a DivideByZeroException

} catch (DivideByZeroException e) {
    //ignored
}

但是,我需要以高效的方式对这个表达式求值 6000 多次(使用不同的变量),因此每次都捕获异常会显着降低我的应用程序速度。

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

有没有办法以 "safe" 的方式计算 C# 中的数学表达式,其中尝试除以 0 将 return 一个静态数字(0 , 或无穷大), 而不会抛出异常?

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

尝试将您的值设为浮点数。

Trying to divide an integer or Decimal number by zero throws a DivideByZeroException exception. To prevent the exception, ensure that the denominator in a division operation with integer or Decimal values is non-zero. Dividing a floating-point value by zero doesn't throw an exception; it results in positive infinity, negative infinity, or not a number (NaN), according to the rules of IEEE 754 arithmetic. Because the following example uses floating-point division rather than integer division, the operation does not throw a DivideByZeroException exception.

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