2012-04-13 22 views
4
int n = 5; 
int quorum = Math.Floor(n/2) + 1; 

我期待法定人數具有值3。但是,這是我在VisualStudio中得到的錯誤方法或屬性之間曖昧:在C#.NET

的調用是以下的方法或模棱兩可之間屬性:'System.Math.Floor(double)'和'System.Math.Floor(decimal)'

如何更正它?我哪裏做錯了?

回答

17

您無需使用Math.Floor。因爲所有的術語都是整數,.NET將執行整數除法,它會自動截斷輸出的其餘部分。

至於你爲什麼得到錯誤,如上所述,整數除法的結果仍然是一個整數。因爲你不能設置一個整數(沒有小數部分要捨去),所以Floor不會超過int。該調用必須首先將結果轉換爲decimaldouble,編譯器不知道您想要哪一個(實際上哪一個都不是)。

4

N/2是一個整數除法 - 這樣的結果是整數 - 事實上也沒有必要做Math.Floor()在這裏所有的 - 只是在做

int quorum = n/2 + 1; 

將產生3預期的結果。

0

除以2.0以確保生成的數字是雙倍數。當給出Math.Floor(double)或Math.Floor(decimal)之間的選擇時,n/2本身並不告訴編譯器將其投射到什麼位置。

int n = 5; 
int quorum = (int)Math.Floor(n/2.0) + 1; 
+1

你甚至嘗試運行這段代碼?它壞了。 – spender 2012-04-13 01:09:29

+0

不,我沒有嘗試代碼。我已經糾正了錯誤 - 它必須與Floor的返回值相關,而不是用法。 – brianestey 2012-04-13 07:27:59

1

Floor方法只接受雙精度和十進制值,但是int自動適合它們兩個。你可以使用從int強制轉換爲十進制或雙然後回到詮釋這樣的:

int n = 5; 
int quorum = (int)Math.Floor((decimal)n/2) + 1; 

OR

int n = 5; 
int quorum = (int)Math.Floor((double)n/2) + 1; 
+1

2個演員和一個地板?這很愚蠢。整數部門消除任何必要施放或地板。 -1 – spender 2012-04-13 01:08:05

+1

他問了。有些人只是想了解事情的運作方式,而不是一開始就以正確的方式進行。我幾乎可以肯定,clewaks知道如何使它沒有地板。當然,那只是我的看法。 – 2012-04-13 08:14:57