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類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM