这是代码:
class Program
{
static void Main(string[] args)
{
double varrr = Divide(10, 0);
}
static double Divide(double a, double b)
{
double c = 0;
try
{
c = a / b;
return c;
}
catch (DivideByZeroException)
{
Console.WriteLine("Division by zero not allowed");
return 0;
}
}
}
我希望除以零来抛出DivideByZeroException
,但它没有,当我在控制台上打印结果时输出为" Infinity"。那是为什么?
答案 0 :(得分:3)
MSDN解释说DivideByZeroException
只会被抛出" [当]试图将整数或十进制数字除以零"而
浮点运算返回PositiveInfinity或NegativeInfinity 发出溢出信号。
改为使用Double.IsInfinity()
:
if (double.IsInfinity(c))
{
Console.WriteLine("Division by zero not allowed");
return 0;
}
答案 1 :(得分:2)
原因很简单:DivideByZeroException
不适用于浮点数。
根据MSDN:
尝试将积分或十进制值除以零时抛出的异常。
因此,它不适用于浮点值。根据{{3}},浮点数例外包括:
- 除以零(对有限操作数的操作给出精确的无限结果,例如1/0或log(0))(默认返回±无穷大)
如果您真的想要查看异常,则需要此代码:
static double Divide(int a, int b)
{
int c = 0;
try
{
c = a / b;
return c;
}
catch (DivideByZeroException)
{
Console.WriteLine("Division by zero not allowed");
return 0;
}
}
答案 2 :(得分:1)
将浮点值除以零不会引发异常;根据IEEE 754算法的规则,它产生正无穷大,负无穷大或不是数字(NaN)。因为以下示例使用浮点除法而不是整数除法,所以该操作不会抛出DivideByZeroException异常。
https://msdn.microsoft.com/en-us/library/system.dividebyzeroexception(v=vs.110).aspx