C# intキャストとMath.Floorの違い

C#で数値の整数部分を取得する際に使用されるintへのキャストとMath.Floorには、それぞれ異なる動作があります。この資料では、その違いを説明し、どのような場面で使い分けるべきかを解説します。


1. (int)キャスト

(int)キャストは、小数点以下を単純に切り捨てます(トランケーション)。

動作

  • 小数点以下の部分を無条件で削除します。
  • 負の数の場合、0に近い方に切り捨てられます(小さい値にはならない)。

特徴

  • 処理が高速で、追加の関数呼び出しが不要。
  • 返り値はint型。

// 正の数
double positive = 3.8;
int resultPositive = (int)positive; // resultPositive = 3

// 負の数
double negative = -3.8;
int resultNegative = (int)negative; // resultNegative = -3
(int) の結果
3.83
-3.8-3

2. Math.Floor

Math.Floorは数学的な「切り捨て」に従い、常に「小さい値」に丸めます。

動作

  • 小数点以下を切り捨て、負の数の場合はより小さい整数値を返します。
  • 戻り値はdouble型。

特徴

  • キャストと異なり、負の数では結果が異なります。
  • 必要に応じて(int)でキャストする必要があります。

// 正の数
double positive = 3.8;
double resultPositive = Math.Floor(positive); // resultPositive = 3.0

// 負の数
double negative = -3.8;
double resultNegative = Math.Floor(negative); // resultNegative = -4.0
Math.Floor の結果
3.83.0
-3.8-4.0

3. 違いのまとめ

(int) の結果Math.Floor の結果
3.833.0
-3.8-3-4.0
  • 正の数の場合:
  • 両者の結果は同じです。
  • 負の数の場合:
  • (int)は0に近い方に丸めます。
  • Math.Floorは常に小さい方に丸めます。

4. 選択のポイント

条件推奨方法
高速処理が必要な場合(int)
数学的な切り捨てが必要な場合Math.Floor
負の数を正確に扱う必要がある場合Math.Floor

注意点

  • Math.Floorを使用する場合、返り値はdouble型となるため、int型にしたい場合は明示的にキャストが必要です。
int result = (int)Math.Floor(value);

5. 実用例

(int) の使用例: 配列インデックスの計算

double index = 4.7;
int arrayIndex = (int)index; // 配列のインデックスとして使用

Math.Floor の使用例: 金額計算

double price = -3.8;
double roundedPrice = Math.Floor(price); // 小さい方の整数値に丸める

この資料を参考に、目的に応じて適切な方法を選択してください。

C#

Posted by hidepon