如何评估 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
我在 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