2016-04-05 9 views
0

double numberをintに変換するとConvert.ToInt32とParsing(int)コマンドの違いを理解できません。私のコード例はここにあります。私はそれを示すときに2つの異なる答え。Convert.ToInt32と(int)Parsingの違いは何ですか

class Program 
{ 
    static void Main(string[] args) 
    { 
     double i = 3.897456465; 
     int y; 
     y = Convert.ToInt32(i); 
     Console.WriteLine(y); 
     y = (int)i; 
     Console.WriteLine(y); 
     Console.ReadKey(); 
    } 
} 
+0

だから、あなたが得た答えは何ですか?あなたがそれを見たときにドキュメントには何が表示されましたか? –

+0

Convert.ToInt32を使用すると「4」、解析するときは「3」になります。 –

+0

多少の読書。倍精度を使用しませんが、シーンの裏で何が起こるのか説明します。http://stackoverflow.com/questions/199470/whats-the-main-difference-between-int-parse-and-convert-toint32 – Eminem

答えて

4

(int) i;は解析していません。

Convert.ToInt32(double)は、最も近い32ビット整数に丸めます。キャスト(int) i;はdouble値の整数部分のみを取り、それを変数に代入します。

1つは丸めを行い、もう1つは整数値を取るため、違いがわかります。 Convert.ToInt32を使用して変換値を丸めに対しすなわち、double値の整数部分であるため、鋳造が1を返した、上記のコードで

double d = 1.99d; 
int castedValue = (int) d; //1 
int convertedValue = Convert.ToInt32(d); //2 

は、以下の例を考えます。 Convert.ToInt32(double)からドキュメントから

3

戻り値
型:可能System.Int32
value、最寄りの32ビット符号付き整数に丸め。 valueが2つの整数の中間にある場合、偶数が返されます。すなわち、4.5を4に変換され、そして5.5がC#5仕様のセクション6.2.1、6.

に変換され、明示的な数値変換:floatまたはdoubleから変換するために

一体型[...]

  • [...]
  • は、そうでない場合、ソース・オペランドは、は、最も近い整数値にゼロ向かって丸められます。この整数値が宛先タイプの範囲内にある場合、この値は変換の結果です。

(重点鉱山。)

だから、基本的には、Convert.ToInt32ラウンドアップまたは最寄りintまで。キャスティングは常にゼロに向かってラウンドします。

関連する問題