为什么这会返回0?

Kra*_*ime -3 c# rounding

也许我已经花了太多的夜晚,但我有以下代码:

MessageBox.Show(
  Convert.ToInt32(
    Math.Round(
      (double)( ( i+1 )/r.Count )*100 ,
      0
    )
  ).ToString()
);
Run Code Online (Sandbox Code Playgroud)

哪个总是返回0,即使i=120000和r.Count=150000.这是一个简单的进度计算,其中i是循环中的当前迭代,并且r是集合(List()).

我已经分离了代码,甚至以下仍然返回0:

Convert.ToInt32( 
           Math.Round( 
                      (double)(( 120000+1 )/167428 )*100
                      , 0 )
                )
Run Code Online (Sandbox Code Playgroud)

不知道这里发生了什么,所以任何关于我做错了什么的洞察力(可能是前额扒手).它应该是(使用上面的数字),返回71.

@Habib的旗帜重复:

你声称重复 - 实际上是不同的,即使这里的解决方案不适用,因为这是一个加倍的转换问题,而不是在游戏中为每个变量添加带有额外小数点的'm'.

Mic*_*lap 9

因为( 120000+1 )/167428仍然使用整数数学来完成.而不是~0.716,它是0.

如果你想在将来避免这种情况,请确保你也将分子和分母投射到双精度.

( (double)( i+1 )/(double)r.Count )*100
Run Code Online (Sandbox Code Playgroud)