将值计算为百分比,并根据此值计算其他值

问题描述:

我有几个日期时间的列表。 DateTime实际上是一个HH:mm:ss格式的字符串,我将它转换为DateTime。将值计算为百分比,并根据此值计算其他值

从这个列表中检索到最大值(分钟)

我计算总纪要如下所示:

//t is a DateTime 
Double totalMin = TimeSpan.Parse(t.ToString()).TotalMinutes; 

的最大值(以分钟为单位),应作为“100 %“值。 我已经计算了列表的最大值。

含义列表中的所有其他值(也是分钟)将根据此值计算。 换句话说,其他较低值必须根据此最大值进行缩放。

这将用在条形图中。所以最大的值将会占用最多的空间,然后是较低的值。

我到底该怎么做?

谢谢PeterP。

+2

't1.TimeOfDay.TotalMinutes'将是正确的方式 – V4Vendetta 2012-04-19 08:00:09

+0

百分比= TOTALMIN/100 * someMin – 2012-04-19 08:00:32

+0

在情况下,如果起点12AM)) – Samich 2012-04-19 08:00:33

你想知道如何计算一个百分比?用最大值除当前值并乘以100.然后,您可以像想要的那样格式化百分比(例如“20%”,“20.2%”,...)。

Double max = 200d; 
Double current = 23d; 

Double percent = current/max * 100; 

您解析Timespan和转换DateTime到是不是真的需要一个字符串。

你的意思是这样的

List<DateTime> lstdt = new List<DateTime>() { 
       new DateTime(2010,5,5,1,10,0), 
       new DateTime(2011,5,5,2,10,0), 
       new DateTime(2010,8,5,1,10,0), 
       new DateTime(2010,5,5,1,10,0), 
       new DateTime(2011,11,5,1,10,0), 
       new DateTime(2010,12,5,1,10,0), 
      };    

double maxval = lstdt.Max(c => c.TimeOfDay.TotalMinutes); 
List<double> lstpercent = lstdt.Select(d1 => d1.TimeOfDay.TotalMinutes/maxval *100.00).ToList<double>(); 

时间跨度的区别是,在一定的时间单位,之间两个日期时间的。你正在解析一个DateTime。你会得到一个出现FormatException:

Double UhOh = TimeSpan.Parse(DateTime.Now.ToString()).TotalMinutes; 

结果:

System.FormatException: "Input string was not in a correct format." 

现在回答你的问题,你会需要另一块数据:另一个日期时间,以便找到的差异几分钟之内,在这两点之间。

让我们假设你想使用:

DateTime.Now 

这会工作:

DateTime t = new DateTime(2012,4,19,0,0,0); 
TimeSpan ts = DateTime.Now - t; 
Double mins = ts.TotalMinutes; 

希望有所帮助。 (:

+0

由于它们本来不是DateTime对象,而是hh:mm:ss格式的字符串(通过使用秒表填充),将它保持为字符串并使用时间跨度来检索分钟数量会更好吗?谢谢。 – PeterP 2012-04-19 08:20:10

+0

哦,好的!我刚刚看到您的评论,并认为这是一个DateTime: // t是DateTime(: – darin 2012-04-19 08:32:05