也许我已经花了太多的夜晚,但我有以下代码:
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'.
因为( 120000+1 )/167428仍然使用整数数学来完成.而不是~0.716,它是0.
如果你想在将来避免这种情况,请确保你也将分子和分母投射到双精度.
( (double)( i+1 )/(double)r.Count )*100
Run Code Online (Sandbox Code Playgroud)