C#中你不知道的double类型 0.0的运算

前段时间偶然看到c#double类型0.0的运算。经研究,总结如下, 如有问题请不吝赐教,谢谢。

1, 我们都知道,C# 任何数除以0 都会报错 “Attemped to divide by zero”

Eg1:

Console.WriteLine(1/0); => 编译通不过。

Eg2:

Int i = 1;

Int j=0;

Console.WriteLine(i/j);  => 编译通过,但运行会报同样的错。

这里为什么编译能通过呢? 因为C#编译器在只有在运行的时候才给变量赋值。编译的时候不赋值,只是当作变量来处理。

Eg3:

Consoe.WriteLine(1.0/0); => 编译通过,且运行结果为Infinity。这是因为编译器将除数0转换成了double类型0.0来处理。请看下面的例子。

2, 但在C# 中任何数除以0.0 会是什么情况呢? 这个是不会报错的,而且还有一个具体的值。

Eg4:

Console.WriteLine(1/0.0);  => 编译通过,得到Infinity, 无穷大的意思。

3, 我们都知道如果 0除以任何数都为0。但C# 中 0/0.0 得到的却是:NaN 意思是Not a Number 的意思。

为什么会这样呢? 因为编译器是首先觉得0除以任何数都是0, 但任何数除以0.0 都是无穷大。所以,他不知道判断应该是0还是无穷大。所以就给出了NaN, Not a number.

Eg4:

Console.WriteLine(0/0.0.); =>NaN

4, 任何数除或除NaN都等于NaN.

5, 任何数除或者乘Infinity 都等于Infinity,0和NaN除外, Infinity*0 = NaN, Infinity* NaN= NaN.

Eg5:

Console.WriteLine(0/0.0/0.0); => NaN

Console.WriteLine(1/0.0*1); =>Infinity.

Console.WriteLine(1/0.0*(0/0.0)); =>NaN.

Console.WriteLine(1/0.0*0) => NaN

6, 值得注意的是: Infinity 和 NaN 都市double类型。

原文地址:https://www.cnblogs.com/nvye/p/3115686.html