2012-06-17 22 views
12

(int)myDouble是否與(int)Math.Truncate(myDouble)有任何不同?不(INT)myDouble曾經從(INT)Math.Truncate(myDouble)有什麼區別?

有什麼理由我應該比另一個更喜歡一個嗎?

+0

我的天真猜測是後者是CLR API的一個明確定義的方面,而前者依賴於語言規範,即使它隱含地相同。 –

+0

我認爲使用'Math.Truncate'是不必要的一步。 – Oded

+3

'Math.Truncate'適用於當你需要保持你的結果作爲'double'沒有小數部分。如果你想將它修改爲一個'int',請使用該轉換。 – Douglas

回答

8

Math.Truncate適用於當您需要將結果保留爲不帶小數部分的雙倍值時。如果你想將它修改爲int,就直接使用cast。

編輯:作爲參考,在這裏是從「Explicit Numeric Conversions Table」的相關文件:

當您從一個雙重或浮點值轉換爲整數類型,值被截斷。

5

正如指出的伊格納西奧巴斯克斯 - 艾布拉姆斯(int)myDouble會以同樣的方式失敗,因爲(int)Math.Truncate(myDouble)時myDouble太大。

因此,輸出沒有差異,但(int)myDouble工作更快。

+2

+1:這個答案提出了一個相關的觀點。除此之外,你需要從截斷的double中移除'(int)'cast,因爲否則它會以相同的情況結束。 – Douglas

+0

@Ignacio Vazquez-Abrams,你是對的。 – dantuch

+0

如果我們預計這個數字相當大,我們不能使用'(long)'嗎? – mpen

相關問題