1

我想知道如何计算两个 DateTimes 之间的百分比,我有一个 BackgroundWorker 执行,直到达到提供的 DateTime,该部分工作正常,我只想在 UI 中显示工人的完成百分比是多少。

我尝试使用以下方法:

var now = DateTime.Now;
var executeUntil = DateTime.Now..AddHours(4).AddMinutes(10);

var percentage = (int)(( executeUntil.Ticks * 100 ) / now.Ticks ); 

但总是返回 1,我猜这是因为 Ticks 是一个很长的数字,并且以某种方式截断了除法。

有什么建议么?

4

2 回答 2

5

试试这个:

var start = DateTime.Now;
var end = DateTime.Now.AddMinutes(1);
var total = (end - start).TotalSeconds;

for( int i = 0; i < 10; i++)
{
Thread.Sleep(6000);

var percentage = (DateTime.Now - start).TotalSeconds*100/total;
Console.WriteLine(percentage);
}
于 2012-10-29T03:47:15.290 回答
3

你对截断是正确的。现在你正在除以长整数,所以商将Math.Floor应用于它并且也是一个不支持小数的长整数。要修复您提供的确切代码,您需要将除数或被除数设为浮点数。这很快使分子成为双倍。

var percentage = (int)(( executeUntil.Ticks * 100d ) / now.Ticks ); 
于 2012-10-29T03:58:27.353 回答