首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个方法返回double.PositiveInfinity而不是DivideByZeroException?

为什么这个方法返回double.PositiveInfinity而不是DivideByZeroException?
EN

Stack Overflow用户
提问于 2016-07-25 19:57:41
回答 4查看 2.5K关注 0票数 13

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

代码语言:javascript
复制
> 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抛出一个格式化错误?我是否可以强迫除法抛出一个错误,而不是返回无穷大?

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

代码语言:javascript
复制
double divide(double a, double b)
{
    if ( b == 0 )
    {
        throw new ArgumentException("Argument b must be non zero.", new DivideByZeroException());
    }
    return a / b;
}

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-07-25 20:04:08

这是因为你使用System.Double

正如MSDN所述,DivideByZeroException只对整型和Decimal抛出。

这是因为双值很难定义“所谓的”零值。

PositiveInfinity也是从除以零得到正的红利,而NegativeInfinity则是从除以零得到负的红利。(资料来源:再次使用MSDN)

DivideByZeroException不适合浮点类型。注意:当你试图除以零除以零的股息时,你可以得到NaN

票数 22
EN

Stack Overflow用户

发布于 2016-07-25 20:04:16

为什么该方法返回无穷大,而3/0抛出一个错误,3/b抛出一个格式化错误?

因为在第一种情况下,0不是整数,是双倍。第二个是整数。你应该在这里意识到,双是一个浮点数。所以它没有一个像整数一样的精确值。另一方面,整数可以用计算机表示,准确率为100%。

这里你可以找到一篇很好的关于浮点数的文章。

票数 2
EN

Stack Overflow用户

发布于 2016-07-25 20:08:00

正如其他人前面所述,这是因为您使用double作为除数。您可以通过使用变量示例来证明这一点,但是可以使用double而不是var

代码语言:javascript
复制
> double a = 3;
> double b = 0;
> a/b
∞
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38576361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档