2010-11-09 30 views
16

可能重複:爲什麼C#Math.Floor()返回的雙重不是int

爲什麼回報,而不是
Why does Math.Floor(Double) return a value of type Double?

做C# Math.Floor() double int

從MSDN文件:

返回最大整數小於或等於指定雙精度浮點數

它說,它返回一個整數。它可以返回double,我總是可以將它投射到int,但它很奇怪,不是嗎?

+1

措辭不當。可以說它應該說「整數」(或其他東西,即使在筆記中)以避免與* int * eger數據類型(s)產生歧義。然而,[整數](http://en.wikipedia.org/wiki/Integer)是一個數學術語,因此,雖然在這裏混淆,但在技術上是正確的。 – 2010-11-09 06:05:39

回答

38

不是真的,考慮到double可能會比int大得多。你不希望溢出一個int值與double值相同的大值。

只是爲了顯示你明白我的意思:

Double.MaxValue = 1.7976931348623157E + 308

Integer.MaxValue = 2,147,483,647

所以,你可以有雙重即3,000,000,000.50和地板吧,這會溢出int的最大值。

+3

這是一個很好的解釋,爲什麼它是有道理的......解釋它爲什麼這麼簡單 - FPU結果是一個「double」。因爲很多時候你想用它作爲'double'(也許從參數中減去它來得到小數部分),那麼轉換它然後必須將其轉換回來是沒有意義的。 – 2010-11-09 05:16:47

+1

@ Ben Voigt - 這也是一個很好的觀點,但並沒有解釋爲什麼返回的值不能是Integer類型,因爲文檔接近暗示。僅僅因爲FPU輸出了某些東西並不意味着某個方法需要返回該結果,尤其是在非本地運行時環境中。 MSDN文檔可能應該使用短語「整體部分」或類似的東西來避免與類型名稱混淆。 – userx 2010-11-09 05:26:24

+2

如果它是一個大小的東西,他們肯定會返回一個長/ Int64? – mike 2010-11-09 05:50:39

3

因爲INPUT是雙重的OUTPUT也必須是雙,還是有很多潛在產出的不適合到輸出變量。

以數學術語,該函數的範圍必須具有相同的大小。

相關問題