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 を乗算すると、float / double へのキャストをいじる必要がないことを意味しますが、すべてのパーセンテージが切り捨てられることを意味します。より正確なパーセンテージが必要な場合は、double にキャストし、順序を気にする必要はありません。

于 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()));

float にキャストして整数除算を回避し、整数の丸めに 0.5 を追加できます。0.5 ではなく 0.5f を使用して、2 倍に拡張しないようにします。

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