如何将Math.Ceiling结果转换为int?

jav*_*red 33 c#

Math.Ceiling返回double因为double可能存储更大的数字.但是,如果我确定该int类型能够存储结果我应该如何转换?施放是否安全(int) Math.Ceiling(...

Øyv*_*hen 45

如果你确定你没有超过int的容量,那么它应该是完全安全的

int myInt = (int)Math.Ceiling(...);
Run Code Online (Sandbox Code Playgroud)

如果你不确定界限,你可以选择long而不是int.


Aur*_*kas 10

从C++实践中,我将使用以下内容.即使天花板返回99.99999 ... 8或100.000000 ... 1,也能保证获得正确的结果

var result = (int)(Math.Ceiling(value) + 0.5);
Run Code Online (Sandbox Code Playgroud)

如果你相信它的实现,下面的代码也应该工作

var result = Convert.ToInt32(value);
Run Code Online (Sandbox Code Playgroud)

  • 我真的需要“+0.5”吗?这就是我的问题。到目前为止,我似乎不需要那些丑陋的代码。 (2认同)
  • Math.Ceiling()返回一个整数值(double或decimal类型).它不会返回分数,因此不需要用0.5"重新舍入"它 (2认同)

Tod*_*odd 7

如果一切都与速度有关,那么用于 Int 输入和输出的 Math.Ceiling 会非常慢。最快的是内联表达式:

var ceilingResult = (value / divisor) + (value % divisor == 0 ? 0 : 1);
Run Code Online (Sandbox Code Playgroud)

从我自己的 1000 万次迭代基准来看,Math.Ceiling 需要大约 2.4 秒。在命名函数内调用此表达式需要约 380 毫秒,而将其作为直接内联表达式需要约 33 毫秒。

如果您希望使用 Math.Floor 进行 Int 输入和输出,则更简单:

var floorResult = (value / divisor);
Run Code Online (Sandbox Code Playgroud)


Fre*_*son 5

我会和

int x = (int)Math.Ceiling(0.9); // 1
Run Code Online (Sandbox Code Playgroud)