1

我有一个包含除法的表达式,其中一些分母有时为零。但是,在这些情况下,我希望该除法结果为 1,而不是引发异常。有什么直接的方法可以做到这一点,还是我被迫做一些 if 语句并更改表达式的输入以获得这种预期的效果?

4

8 回答 8

7

虽然我必须质疑这里的动机,但如果你需要这样做,那就做一个函数。

double SafeDiv(double num, double denom) {
   if(denom == 0) {
      return 1;
   }
   return num/denom;
}
于 2011-09-21T14:04:37.960 回答
1

由于无法为内置类型重新定义除法运算符,因此您需要在函数中实现除法版本。

于 2011-09-21T14:06:00.347 回答
1

像这样的东西?

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所写的内容,并质疑这样做的动机。

于 2011-09-21T14:06:34.163 回答
1

你可以写一个除法函数。这是一个扩展示例想法:

public static float DivideBy(this float toBeDivided, float divideBy){
    try
    {
    return toBeDivided / divideBy;
    }
    catch(DivideByZeroException)
    {
    return 1.0;
    }
}
于 2011-09-21T14:04:32.433 回答
0

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

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)
    {

    }
}
于 2011-09-21T14:11:35.860 回答
0

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

如果由于某种原因需要在除以零时返回 1,那么您有几种选择:

  • 自定义泛型函数
  • 具有重载运算符的自定义类型
  • 在除法之前检查除数是否为0

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

于 2011-09-21T14:18:07.840 回答
0

也许你可以试试这个

    double res = a / (b == 0 ? a : b);
于 2011-09-21T17:41:56.873 回答
0

不。如果我理解您的问题,您想更改除法操作的行为并让它返回 1 而不是 throw。没有办法做到这一点。

于 2011-09-21T14:07:51.637 回答