C#-是否可以让被零除返回一个数字,而不是引发异常?

C#-是否可以让被零除返回一个数字,而不是引发异常?,c#,math,error-handling,divide-by-zero,C#,Math,Error Handling,Divide By Zero,我有一个包含除法的表达式,有些分母有时是零。但是,在这些情况下,我希望该划分结果为1,而不是抛出异常。有没有什么简单的方法可以做到这一点,或者我被迫执行一些if语句并更改表达式的输入以获得所需的效果?您可以编写一个用于除法的函数。下面是一个扩展示例想法: public static float DivideBy(this float toBeDivided, float divideBy){ try { return toBeDivided / divideBy;

我有一个包含除法的表达式,有些分母有时是零。但是,在这些情况下,我希望该划分结果为1,而不是抛出异常。有没有什么简单的方法可以做到这一点,或者我被迫执行一些if语句并更改表达式的输入以获得所需的效果?

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

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

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

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

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

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

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

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

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

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

类似的内容

double SafeDiv(double num, double denom) {
   if(denom == 0) {
      return 1;
   }
   return num/denom;
}
public T divide<T>(T dividend, T divisor) {
    return ((divisor == 0) ? (1) : (dividend / divisor));
}
公共T除法(T除法,T除法){
回报率((除数==0)?(1):(股息/除数);
}
或者也许

public T divide<T>(T dividend, T divisor) {
    try {
        return dividend / divisor;
    }
    catch (DivideByZeroException) {
        return 1;
    }
}
公共T除法(T除法,T除法){
试一试{
回报股息/除数;
}
捕获(除零异常){
返回1;
}
}
P>个人,如果你知道在某些情况下除数可能是0,我不会认为这个例子是“例外”,因此使用第一种方法(也可以非常方便地,如果你这么倾向的话,可以手动插入)。 也就是说,我同意我所写的,并质疑这样做的动机。

类似的事情

public T divide<T>(T dividend, T divisor) {
    return ((divisor == 0) ? (1) : (dividend / divisor));
}
公共T除法(T除法,T除法){
回报率((除数==0)?(1):(股息/除数);
}
或者也许

public T divide<T>(T dividend, T divisor) {
    try {
        return dividend / divisor;
    }
    catch (DivideByZeroException) {
        return 1;
    }
}
公共T除法(T除法,T除法){
试一试{
回报股息/除数;
}
捕获(除零异常){
返回1;
}
}
P>个人,如果你知道在某些情况下除数可能是0,我不会认为这个例子是“例外”,因此使用第一种方法(也可以非常方便地,如果你这么倾向的话,可以手动插入)。
也就是说,我同意所写内容,并质疑这样做的动机。

否。如果我理解您的问题,您希望更改除法运算的行为,并让它返回1而不是抛出。没有办法做到这一点。

没有。如果我理解您的问题,您希望更改除法运算的行为,让它返回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)
    {

    }
}

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

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

    }
}

若除法器或除数为双精度且除数为0(或0.0),则结果为正无穷大或负无穷大。它将通过所有后续操作而不抛出,而是返回±无穷大或NaN,具体取决于另一个操作数。稍后,您可以检查最终值是否有意义

如果由于某种原因需要在除以零时返回1,则有几个选项:

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

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

如果除法器或除数是双精度的,除数是0(或0.0),结果是正无穷大或负无穷大。它将通过所有后续操作而不抛出,而是返回±无穷大或NaN,具体取决于另一个操作数。稍后,您可以检查最终值是否有意义

如果由于某种原因需要在除以零时返回1,则有几个选项:

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

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

也许你可以试试这个

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

也许你可以试试这个

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


你为什么要这样扭曲空间和时间?你的数据类型是什么?double不能在这里抛出,IIRC-int与零的除法很糟糕。我一定会在除名前检查一下。怀疑是否有内置的功能可以为您这样做,但这是一个有趣的问题。您可以不检查Demominator是否为零并返回1吗?我想要一个使Math.PI返回“美味”的函数!为什么要这样扭曲空间和时间?您的数据类型是什么?double不能在这里抛出,IIRC-int与零的除法很糟糕。我一定会在除名前检查一下。怀疑是否有内置的功能可以为您这样做,但这是一个有趣的问题。您可以不检查Demominator是否为零并返回1吗?我想要一个使Math.PI返回“美味”的函数作为一个小玩意儿,方法的两个参数分别称为“被除数”和“除数”。另外,先检查divideBy是否为0,然后返回1会快得多。异常非常慢。为什么要使用try-catch?您知道当除数为零时会出现异常,所以只需使用if语句即可。异常很慢,但如果很少发生,try/catch通常会更快,因为您不是每次都检查一个条件。我想指出,这只是一个示例想法;我真的无法理解实际使用这个IRL。使用异常并没有什么错,如果它们只是例外。OP声明应该是零,所以我怀疑它算不算例外..作为一个小好事,你的方法的两个参数分别称为被除数和除数