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.8 | 3 |
-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.8 | 3.0 |
-3.8 | -4.0 |
3. 違いのまとめ
値 | (int) の結果 | Math.Floor の結果 |
---|---|---|
3.8 | 3 | 3.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); // 小さい方の整数値に丸める
この資料を参考に、目的に応じて適切な方法を選択してください。
ディスカッション
コメント一覧
まだ、コメントがありません