4

尝试计算完成百分比时我在这里遗漏了什么?我的百分比方程似乎返回了不正确的百分比。

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;
    }
}
4

4 回答 4

12

要计算出你应该做的百分比

progress
--------  x 100
 total

你在做

progress x total
----------------
       100

尝试(counter * 100) / vehicles.Count()改用。

注意:如果你在除法之前乘以 100,这意味着你不需要对浮点数/双精度数进行强制转换,但这确实意味着你所有的百分比都被四舍五入了。如果你想要一个更精确的百分比,那么将其转换为双精度数,不要担心顺序。

于 2012-10-19T16:21:29.330 回答
9

怎么样

     Int32 percentage = counter * 100 / vehicles.Count();
于 2012-10-19T16:17:43.327 回答
3

试试这个 :-

  int percentage= (int)( ((100f * counter) / vehicles.count()));

强制转换为浮点数以避免整数除法给你一个零,你可以添加 0.5 进行整数舍入。使用 0.5f 而不是 0.5 来防止它扩大到两倍,即

  int percentage= (int)(0.5f + ((100f * counter) / vehicles.count()));
于 2012-10-19T16:22:21.093 回答
1

你也可以使用 Math.round():

Int32 percentage = (Int32)Math.Round( (double)(counter * 100) / vehicles.Count());
于 2014-02-19T15:59:36.827 回答