doubleを使用していくつかの計算を実行し、intにキャストする必要があります。だから私は簡単な質問があります、ダブルと言う7.5をintにキャストすると、7が返されます。
これは、小数点以下の四捨五入または単にストライピングの結果ですか?
四捨五入の結果である場合、それは賢いですか、つまり、0.1から0.5は切り捨て、0.6から0.9は切り上げますか?
乾杯
丸めは行わず、小数点の前の整数部分を返すだけです。
参照 (ローリングに感謝)明示的な数値変換テーブル:
double または float 値を整数型に変換すると、この値はゼロに向かって最も近い整数値に丸められます。
簡単なテストを書くことで、このような簡単な問題を自分で試すことができます。次のテスト ( NUnitを使用) はパスするため、質問に対する回答が得られます。
[Test]
public void Cast_float_to_int_will_not_round_but_truncate
{
var x = 3.9f;
Assert.That((int)x == 3); // <-- This will pass
}
切り捨てられると思ってだまされないでください。小数を取り除き、倍精度の整数部分のみを返します。2.75 から切り捨てると 2 になりますが、-2.75 から切り下げると -3 になるため、これは負の数の場合に重要です。キャストでは切り捨てられないため、(int)2.75 は 2 になりますが、(int)-2.75 は -2 になります。
double positiveDouble = 2.75;
double negativeDouble = -2.75;
int positiveInteger = (int) positiveDouble;
int negativeInteger = (int) negativeDouble;
Console.WriteLine(positiveInteger + " = (int)" + positiveDouble);
Console.WriteLine(negativeInteger + " = (int)" + negativeDouble);
Console.ReadLine();
//Output: 2 = (int)2.75
// -2 = (int)-2.75
単純にキャストすると、小数点以下のすべてが削除されます。切り上げまたは切り捨てを行うには、Math.Round() メソッドを使用できます。これにより、切り上げまたは切り下げが行われ、途中で何をすべきかについてのパラメーターが提供されます。Math.Floor()またはMath.Ceiling()メソッドを使用して、キャストの前に暗黙的に切り上げまたは切り捨てを行うこともできます。ここではいくつかの例を示します。
double num1 = 3.5;
double num2 = 3.2;
double num3 = 3.9;
(int)num1 // returns 3;
(int)num2 // returns 3;
(int)num3 // returns 3 also;
(int)Math.Round(num1) // returns 4
(int)Math.Round(num2) // returns 3
(int)Math.Round(num3) // returns 4
(int)Math.Floor(num1) // returns 3
(int)Math.Floor(num2) // returns 3
(int)Math.Floor(num3) // returns 3
(int)Math.Ceiling(num1) // returns 4
(int)Math.Ceiling(num2) // returns 4;
(int)Math.Ceiling(num3) // returns 4;
整数部分を取ります
double d = 0.9;
System.Console.WriteLine((int)d);
結果は0です
こんな普通のキャスト
int number;
double decimals = 7.8987;
number = (int)decimals;
number = 7 を返します。これは、最下位の数字をスキップするだけだからです。適切に丸めたい場合は、次のようにMath.Round()を使用できます。
number = (int)Math.Round(number);
これは number = 8 を返します。
C# 言語仕様から:
コンテキストでは、
unchecked
変換は常に成功し、次のように進行します。• オペランドの値が NaN または無限の場合、変換の結果は変換先の型の未指定の値になります。
• それ以外の場合、ソースオペランドはゼロに向かって最も近い整数値に丸められます。この整数値が変換先の型の範囲内にある場合、この値は変換の結果です。
• それ以外の場合、変換の結果は宛先タイプの未指定の値になります。
MSDN の「明示的な数値変換表 — 備考」も参照してください。
7.5 の 2 倍に対して 7 を返す場合は、丸めではありません。これは、丸め規則により、5 以上は切り捨てではなく切り上げられるためです。