前段時間偶然看到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類型。