C计算百分比#
我在尝试计算完成百分比时在这里丢失了什么?我的百分比方程似乎返回不正确的百分比。C计算百分比#
Int32 counter = 0;
foreach (var vehicle in vehicles)
{
counter += 1;
Int32 percentage = (Int32)((double)counter * vehicles.Count())/100;
_worker.ReportProgress(percentage);
if (_worker.CancellationPending)
{
e.Cancel = true;
_worker.ReportProgress(0);
return;
}
}
制定出百分比,你应该做的
progress
-------- x 100
total
你正在做
progress x total
----------------
100
尝试使用(counter * 100)/vehicles.Count()
代替。
注意:如果你在分割之前乘以100,这意味着你不需要混淆转换为浮动/双打,但是这意味着你的所有百分比都向下舍入。如果你想要一个更精确的百分比,然后投掷双打,不要担心顺序。
是的,它对我意识到这是正确的路线。我想我昨天晚上睡得不够。 :) –
如果我有1,4,1,我试着用'Math.Round()'得到百分比,我最终得到17%,67%,17%,总计达到101%。我将如何解决这个问题? – Si8
怎么样
Int32 percentage = counter * 100/vehicles.Count();
+1,但不要忘记检查Count()!= 0(或车辆!=为null)。 – iMortalitySX
,因为它在foreach循环内,如果循环内的代码被执行,Count始终> 0。 – user287107
LOL,你是对的,我只是想说明一个普通的情况,你会检查它们。 – iMortalitySX
试试这个: -
int percentage= (int)(((100f * counter)/vehicles.count()));
演员浮动,以避免整数除法给你一个零,并且可以为整数四舍五入0.5。使用0.5F不是0.5,以保持它扩大一倍,即
int percentage= (int)(0.5f + ((100f * counter)/vehicles.count()));
您还可以使用Math.round():
Int32 percentage = (Int32)Math.Round((double)(counter * 100)/vehicles.Count());
“我的个方程似乎返回不正确的百分比。”什么样的输入值给出了什么样的输出值,以及你期望的是什么?你可以将其重写为一个简短但完整的控制台应用程序吗? (这样做应该是微不足道的。) –
你为什么用计数乘以计数而不是分数?我认为你有一个在你的公式有点倒退... – iMortalitySX
iMortalitySX,你说得对。我稍微反了一点。 :) –