c# -是否有可能使除零返回一个数字,而不是抛出异常



我有一个包含除法的表达式,其中一些分母有时为零。然而,在这些情况下,我希望除法的结果是1,而不是抛出异常。是否有任何直接的方法来做到这一点,或者我被迫做一些if语句并改变表达式的输入来获得预期的效果?

虽然我必须质疑这里的动机,但如果您需要这样做,请创建一个函数。

double SafeDiv(double num, double denom) {
   if(denom == 0) {
      return 1;
   }
   return num/denom;
}

您可以编写一个除法函数。下面是一个扩展示例思想:

public static float DivideBy(this float toBeDivided, float divideBy){
    try
    {
    return toBeDivided / divideBy;
    }
    catch(DivideByZeroException)
    {
    return 1.0;
    }
}

由于无法为内置类型重新定义除法操作符,因此需要在函数中实现除法操作。

像这样?

public T divide<T>(T dividend, T divisor) {
    return ((divisor == 0) ? (1) : (dividend / divisor));
}

或者……

public T divide<T>(T dividend, T divisor) {
    try {
        return dividend / divisor;
    }
    catch (DivideByZeroException) {
        return 1;
    }
}

就我个人而言,如果你知道除数在某些情况下可能是0,我不会认为这种情况是"例外",因此使用第一种方法(如果你愿意,也可以非常方便地手动内联)。

这就是说,我同意Chris Marasti-Georg所写的,并质疑这样做的动机。

No。如果我理解你的问题,你想改变除法操作的行为,让它返回1而不是抛出。这是不可能的

首先检查分母是否为零,如果不等于零则执行操作

public double ReturnValueFunction(int denominator, int numerator)
{
    try
    {
       if(denominator!=0)
       {
             return  numerator/ denominator; 
         /* or your code */
        }
  else
   {
            /*your code*/
        return someDecimalnumber;
   }
}
    catch(Exception ex)
    {
    }
}

如果除数或除数都是double且除数为0(或0.0),结果是正无穷大或负无穷大。它将通过所有后续操作而不抛出,而是返回±Infinity或NaN,具体取决于其他操作数。稍后您可以检查最终值是否有意义。

如果由于某种原因必须在除以0时返回1,那么您有几个选项:

  • 自定义泛型函数
  • 带有重载操作符的自定义类型
  • 除法前检查除数是否为0

据我所知,这不是通常做的事情,所以你可能会重新思考为什么要这样做…

也许你可以试试这个

    double res = a / (b == 0 ? a : b);

最新更新