163

double を最も近い int に変換するにはどうすればよいですか?

4

8 に答える 8

295
double d = 1.234;
int i = Convert.ToInt32(d);

参照

丸めは次のように処理します。

最も近い 32 ビットの符号付き整数に丸められます。値が 2 つの整数の中間にある場合、偶数が返されます。つまり、4.5 は 4 に変換され、5.5 は 6 に変換されます。

于 2009-03-11T04:34:09.460 に答える
85

Math.round()を、おそらく併用して使用するMidpointRounding.AwayFromZero

例えば:

Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3
于 2009-03-11T04:33:57.323 に答える
36

関数を使用することもできます:

//Works with negative numbers now
static int MyRound(double d) {
  if (d < 0) {
    return (int)(d - 0.5);
  }
  return (int)(d + 0.5);
}

アーキテクチャによっては、数倍高速です。

于 2011-11-10T09:03:38.010 に答える
14
double d;
int rounded = (int)Math.Round(d);
于 2009-03-11T04:34:34.700 に答える
5

この質問は古いことは知っていますが、同様の質問に対する答えを探しているときに見つけました。私が与えられた非常に役立つヒントを共有したいと思いました.

int に変換するときは、.5ダウンキャストする前に値を追加するだけです。へのダウンキャストは常により低い数値 (例: ) にint低下するため、数値が以上の場合、追加すると次の数値になり、ダウンキャストから正しい値が返されます。(例)(int)1.7 == 1.5.5int(int)(1.8 + .5) == 2

于 2014-04-09T15:45:03.890 に答える
-2

Int ボタンを備えた関数電卓を開発しています。以下がシンプルで信頼できるソリューションであることがわかりました。

double dblInteger;
if( dblNumber < 0 )
   dblInteger = Math.Ceiling(dblNumber);
else
   dblInteger = Math.Floor(dblNumber);

Math.Round は、予期しない、または望ましくない結果を生成することがあります。また、整数への明示的な変換 (キャストまたは Convert.ToInt... を介して) は、より高い精度の数値に対して誤った値を生成することがよくあります。上記の方法は常に機能するようです。

于 2011-04-12T01:33:10.440 に答える