2016-12-01 58 views
0

作爲從my previous question的後續,我注意到奇怪的行爲(用控制檯)除以零。我發現下面的兩個語句編譯罰款:爲什麼小數在零除後會產生編譯時錯誤?

Console.WriteLine(1d/0d); 
Console.WriteLine(1f/0f); 

而這兩個給一個編譯時錯誤:

Console.WriteLine(1/0); 
Console.WriteLine(1m/0m); 

Division by constant zero

爲什麼會出現這種行爲差異?

+0

@JeroenVannevel我的問題是關於編譯時錯誤,但我認爲原因與運行時錯誤相同,謝謝 – TheLethalCoder

+0

這些問題是相關的,但它不是真正的重複:強調編譯時錯誤。另一個是「爲什麼雙倍允許除以0」 – Guillaume

+0

@Guillaume儘管重複的回答了這個問題,並且涵蓋了編譯和運行時錯誤/異常,但我相信它仍然是一個騙局 – TheLethalCoder

回答

0

對於float和double類型,允許用0除以0。它返回無窮大。

對於Int32和Decimal,它是不允許的,它會引發異常。 編譯器不允許在常量值上除以0,因爲它會導致未定義的行爲。

public class MyConsts { 
public const int i = 1/0; // Constant, compile time evaluation 
} 

... 

Console.WriteLine(MyConsts.i); // What would you expect ? 

編譯器無法爲常量表達式計算適當的值。請記住,該值是在運行時進行編譯和評估的,因此無法引發異常。

+0

這正是我在我的問題中所說的,問題是爲什麼 – TheLethalCoder

+0

這是由設計。不同的數字類型的實現方式...不同的類型,不同的功能。 爲什麼downvote? – Guillaume

+0

我添加了一些關於爲什麼無法評估常量(編譯時間)除以0的細節。 – Guillaume

相關問題