将值计算为百分比,并基于此值基于其他值

时间:2012-04-19 07:56:29

标签: c# .net

我有几个DateTimes的列表。 DateTime实际上是一个HH:mm:ss格式的字符串,我转换为DateTime。

从此列表中检索最大值(以分钟为单位)

我计算总分钟数如下:

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

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

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

这将用于条形图。因此,最大值将占用最大空间,然后是较低值。

我究竟能做到这一点?

谢谢PeterP。

3 个答案:

答案 0 :(得分:3)

您想知道如何计算百分比?将电流除以最大值并乘以100.然后您可以按照您想要的格式设置百分比(例如“20%”,“20.2%”,......)。

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

Double percent = current / max * 100;

答案 1 :(得分:1)

Timespan是两个DateTime之间在某个时间单位的差异。你正在解析一个DateTime。你会得到一个FormatException:

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

结果:

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

现在回答你的问题,你将需要另一个数据:另一个DateTime,以便找到这两点之间的差异,以分钟为单位。

我们假设您要使用:

DateTime.Now

这样可行:

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

希望有所帮助。 (:

答案 2 :(得分:0)

您正在解析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>();