double を最も近い int に変換するにはどうすればよいですか?
8 に答える
double d = 1.234;
int i = Convert.ToInt32(d);
丸めは次のように処理します。
最も近い 32 ビットの符号付き整数に丸められます。値が 2 つの整数の中間にある場合、偶数が返されます。つまり、4.5 は 4 に変換され、5.5 は 6 に変換されます。
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
関数を使用することもできます:
//Works with negative numbers now
static int MyRound(double d) {
if (d < 0) {
return (int)(d - 0.5);
}
return (int)(d + 0.5);
}
アーキテクチャによっては、数倍高速です。
double d;
int rounded = (int)Math.Round(d);
この質問は古いことは知っていますが、同様の質問に対する答えを探しているときに見つけました。私が与えられた非常に役立つヒントを共有したいと思いました.
int に変換するときは、.5
ダウンキャストする前に値を追加するだけです。へのダウンキャストは常により低い数値 (例: ) にint
低下するため、数値が以上の場合、追加すると次の数値になり、ダウンキャストから正しい値が返されます。(例)(int)1.7 == 1
.5
.5
int
(int)(1.8 + .5) == 2
Int ボタンを備えた関数電卓を開発しています。以下がシンプルで信頼できるソリューションであることがわかりました。
double dblInteger;
if( dblNumber < 0 )
dblInteger = Math.Ceiling(dblNumber);
else
dblInteger = Math.Floor(dblNumber);
Math.Round は、予期しない、または望ましくない結果を生成することがあります。また、整数への明示的な変換 (キャストまたは Convert.ToInt... を介して) は、より高い精度の数値に対して誤った値を生成することがよくあります。上記の方法は常に機能するようです。