web-dev-qa-db-ja.com

doubleをintに変換します

doubleintに変換する最良の方法は何ですか?キャストを使用する必要がありますか?

130
user496949

デフォルトのtruncate-towards-zero動作が必要な場合は、キャストを使用できます。または、Math.CeilingMath.RoundMath.Floorなどを使用することもできますが、後でキャストが必要になります。

intの範囲がdoubleの範囲よりもはるかに小さいことを忘れないでください。 doubleからintへのキャストは、値が未チェックのコンテキストでintの範囲外にある場合は例外をスローしませんが、Convert.ToInt32(double)の呼び出しは例外をスローします。値が範囲外の場合、キャストの結果(チェックされていないコンテキストで)は明示的に未定義です。

209
Jon Skeet

キャスト、つまり(int)SomeDoubleを使用する場合、小数部分は切り捨てられます。つまり、SomeDoubleが4.9999の場合、結果は5ではなく4になります。intに変換しても数値は丸められません。丸めたい場合は、Math.Roundを使用します

36
Armen Tsirunyan

ええ、なぜですか?

double someDouble = 12323.2;
int someInt = (int)someDouble;

Convertクラスを使用してもうまくいきます。

int someOtherInt = Convert.ToInt32(someDouble);
29
Jeff Mercado

Convert.ToInt32は変換する最良の方法です

7
anishMarokey

最善の方法は、単にConvert.ToInt32を使用することです。それは高速であり、正しく丸められます。

なぜもっと複雑にするのですか?

3
majed

ここに完全な例があります

class Example 
{    
  public static void Main() 
  {    
    double x, y; 
    int i; 

    x = 10.0; 
    y = 3.0; 

    // cast double to int, fractional component lost (Line to be replaced) 
    i = (int) (x / y); 
    Console.WriteLine("Integer outcome of x / y: " + i); 
  }    
}

数値をより近い整数に丸めるには、次のようにします

i = (int) Math.Round(x / y); // Line replaced
2
mariana soffer

最善の方法はConvert.ToInt32であると思います。

2
Singleton

int myInt =(int)Math.Ceiling(myDouble);

1
mathewsun
label8.Text = "" + years.ToString("00") + " years";

ラベルなどに送信したいときに、小数部のコンポーネントが必要ない場合は、これが最善の方法です

label8.Text = "" + years.ToString("00.00") + " years";

あなたが2つだけで欲しいなら、それはいつもそのようなものです

0
Ruth

私の方法は次のとおりです。

 - Convert.ToInt32(double_value)
 - (int)double_value
 - Int32.Parse(double_value.ToString());
0
kst