2012-06-17 6 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に修復したい場合は、直接キャストを使用してください。

編集

あなたは整数型にdoubleまたはfloat型の値から変換する場合、値は切り捨てられます。参考のため、ここでは「Explicit Numeric Conversions Table」から関連する文書があります。

5

としてはmyDoubleが大きすぎる場合(int)Math.Truncate(myDouble)と同じように失敗しますイグナシオバスケス - エイブラムス(int)myDoubleによって指摘しました。

出力に違いはありませんが、(int)myDoubleは高速に動作しています。

+2

+1:この回答は関連するポイントを提起します。それ以外の場合は同じ状況になるので、 '(int)'キャストを切り捨てられたdoubleから削除する必要がある点を除きます。 – Douglas

+0

@Ignacio Vazquez-Abrams、そうです。 – dantuch

+0

数字がかなり大きいと思ったら '(long)'を使うことはできませんでしたか? – mpen

関連する問題