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

如何计算C#中可以除零的字符串表达式?,c#,expression,eval,dividebyzeroexception,C#,Expression,Eval,Dividebyzeroexception,我在C#中遇到了一个奇怪的问题,我需要计算一些数学字符串表达式,这些表达式可以除以0。以下是一个例子: string expression = GetUserInput(); // Example: "(x + y) / z", where z may equal to 0 我目前正在使用库来计算这个表达式,如果当前表达式中的z参数是0,它将抛出一个DivideByZeroException 我尝试通过以下操作捕获异常: try { string formula = GetUserIn

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

string expression = GetUserInput(); // Example: "(x + y) / z", where z may equal to 0
我目前正在使用库来计算这个表达式,如果当前表达式中的
z
参数是
0
,它将抛出一个
DivideByZeroException

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

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

    // ...

    exp.Evaluate(); // Throws a DivideByZeroException

} catch (DivideByZeroException e) {
    //ignored
}
但是,我需要以一种省时的方式对这个表达式求值6000多次(使用不同的变量),因此每次捕获一个异常都会大大降低我的应用程序的速度

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


有没有一种方法可以以“安全”的方式计算C中的数学表达式,尝试除以
0
将返回一个静态数字(
0
,或无穷大),而不会引发异常?

计算z。如果z>0,则执行该操作,否则移动到下一个计算

尝试将值设为浮点数

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


您是否应该首先解析表达式并检查z是否与零不同?为什么您认为异常会显著降低应用程序的速度@Thomas每次,表达式都是不同的(因为它是由用户输入的),我不知道它是否可以除以零。@YeldarKurmangaliyev,因为我在我的应用程序上做了一些分析。当抛出和捕获数千个异常时,它会以明显的方式影响性能。在你的参考书中,问题是不同的。我的问题是抛出异常时性能不佳。在我的回答中,请尝试浮点值,否则我认为您要么需要破解ncalcs源代码,要么找到另一个计算器—他不知道将使用哪个变量进行除法。它可以是任何能产生被零除的组合。用户可能会做x/y/(1-z)@anil:在发布这么简单的答案之前,你可以先讨论一下。即使是一个c#coder新手也知道如何像这样检查0
Evaluate z。如果z大于0,则执行该操作,否则移动到下一个计算。