c# - 为什么此方法返回 double.PositiveInfinity 而不是 DivideByZeroException?

标签 c# exception-handling infinity dividebyzeroexception

我在 VS2015 C# 交互中运行了以下代码片段,得到了一些非常奇怪的行为。

> double divide(double a, double b)
. {
.     try
.     {
.         return a / b;
.     }
.     catch (DivideByZeroException exception)
.     {
.         throw new ArgumentException("Argument b must be non zero.", exception);
.     }
. }    
> divide(3,0)
Infinity    
> 3 / 0
(1,1): error CS0020: Division by constant zero
> var b = 0;
> 3 / b
Attempted to divide by zero.
> 

为什么方法返回无穷大而 3/0 抛出错误而 3/b 抛出格式化错误?我可以强制除法抛出错误而不是返回无穷大吗?

如果我将方法重新格式化为

double divide(double a, double b)
{
    if ( b == 0 )
    {
        throw new ArgumentException("Argument b must be non zero.", new DivideByZeroException());
    }
    return a / b;
}

新的 DivideByZeroException 是否包含与捕获的异常相同的所有信息和结构?

最佳答案

这是因为你使用了System.Double

MSDN 所述DivideByZeroException 仅针对整数类型和 Decimal 抛出。

那是因为很难为 Double 值定义“所谓的”零。

PositiveInfinity also results from a division by zero with a positive dividend, and NegativeInfinity results from a division by zero with a negative dividend. (source: MSDN again)

DivideByZeroException 不适用于浮点类型。注意:尽管在尝试除以零且被除数为零时,您可以获得 NaN

关于c# - 为什么此方法返回 double.PositiveInfinity 而不是 DivideByZeroException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38576361/

相关文章:

c# - 将 NLog 与 WPF 富文本框一起使用

c# - 使用 CSS 更改 ASP.NET 中下拉列表所选元素的背景颜色

c++ - C++中什么情况下会得到nan?

JavaScript - Infinity 和 NaN 应该是数字吗?

c++ - std::current_exception 是否应该从类的析构函数中的 catch block 返回非空

css - 使 div 向左延伸到无穷大

c# - EntityFramework MySQL 检索结果进行计数

c# - 在 SerializationInfo 中获取具有值的成员

java - 多次或一次 try catch

python - 我可以获取引发异常的 Python 函数的局部变量吗?