C# 除以零返回无穷大

C# 除以零返回无穷大,c#,divide-by-zero,C#,Divide By Zero,我是个编程新手,我有一个被零除的问题。问题在代码中的注释中解释 public float Divide (float a, float b) { if (!Equals (b, 0)) return a / b; else return 0; // what should this return contains not to giving me back infinite? // But for exampl

我是个编程新手,我有一个被零除的问题。问题在代码中的注释中解释

public float Divide (float a, float b)
{
    if (!Equals (b, 0))
        return a / b;
    else
        return 0; // what should this return contains not to giving me back  infinite?
                  // But for example message that you can't divide by zero?
}

您不应返回0。如果
a
为负,则应返回
float.NegativeInfinity
(如果
a
为正),如果
a
b
都为0,则应返回
float.NegativeInfinity
。请注意,这与在代码中执行此操作时得到的行为相同:

return a / b;
因此,您可能只想将代码更改为:

public float podil (float a, float b) {
    return a / b;
}
如果除以0表示应用程序中的特定非法条件,并且不希望传播
float.NaN
值,则应引发异常。比如:

public float podil (float a, float b) {
    var result = a / b;
    if (float.IsNan(result))
        throw new DivideByZeroException(); // or a different exception type.
    return result;
}

看到这一点,它将返回float.PositiveInfinity

如果您不喜欢默认值,返回什么取决于您自己。。。通常会抛出异常,但它不是“return”

最接近的答案是return
float?
-

public float? podil (float a, float b) 
{
    return b == 0 ? (float?) null : a / b;
}

您也可以考虑,但是处理异常或可空类型通常更容易。


注意:由于在以前的计算中可能存在舍入问题,请小心将浮点数与0进行比较(使用
等于
=
)?无限值?
float
没有。如果
b
为零,请不要调用该方法,除非您需要特定的结果

对于您的代码,您可以这样做(这只是许多解决方案中的一个):使用内置的无穷常量,例如:

public float Divide (float a, float b)
{
    return Equals (b, 0) ? float.NegativeInfinity : a / b;
}

你要什么都行。你是在要求例外吗?不相关的注意:你应该小心比较浮点数是否相等。一般来说,您不应该这样做,因为它很可能由于精度问题而适得其反。我很确定它将抛出一个
除以零的异常,而不是返回正数/负数infinity@BradleyDotNET不适用于浮动;它们将返回无穷大除以零(或NaN表示0/0)。整数除法将抛出被零除的异常。