Math.Ceiling の結果を int に変換する方法は?

int の容量を超えていないことが確実な場合は、完全に安全に実行できるはずです

int myInt = (int)Math.Ceiling(...);

境界がわからない場合は、 long を使用できます int の代わりに .


C++ の実践から、私は以下を使用します。天井が 99.99999...8 または 100.000000...1 を返す場合でも、正しい結果が得られることが保証されています

var result = (int)(Math.Ceiling(value) + 0.5);

以下のコードも、実装が信頼できる場合は機能するはずです

var result = Convert.ToInt32(value);

速度がすべてである場合、Int の入力と出力の Math.Ceiling は非常に低速です。最も速いのはインライン式です:

var ceilingResult = (value / divisor) + (value % divisor == 0 ? 0 : 1);

私自身の 1,000 万回の反復のベンチマークから、Math.Ceiling には約 2.4 秒かかりました。名前付き関数内でこの式を呼び出すには最大 380 ミリ秒かかり、直接インライン式として使用するには最大 33 ミリ秒かかります。

Int 入力と出力に Math.Floor が必要な場合は、さらに簡単です:

var floorResult = (value / divisor);