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

C# 将值计算为百分比,并基于此值计算其他值,c#,.net,C#,.net,我有几次约会的清单。 DateTime实际上是一个HH:mm:ss格式的字符串,我将其转换为DateTime 从该列表中,我检索最大值(以分钟为单位) 我按如下方式计算总分钟数: //t is a DateTime Double totalMin = TimeSpan.Parse(t.ToString()).TotalMinutes; 最大值(以分钟为单位)应用作“100%”值。 我已经计算了列表的最大值 这意味着列表中的所有其他值(也以分钟为单位)将基于此值进行计算。 换句话说,其他较低的值

我有几次约会的清单。 DateTime实际上是一个HH:mm:ss格式的字符串,我将其转换为DateTime

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

我按如下方式计算总分钟数:

//t is a DateTime
Double totalMin = TimeSpan.Parse(t.ToString()).TotalMinutes;
最大值(以分钟为单位)应用作“100%”值。 我已经计算了列表的最大值

这意味着列表中的所有其他值(也以分钟为单位)将基于此值进行计算。 换句话说,其他较低的值必须在此最大值上缩放

这将在条形图中使用。因此,最大的值将占用最多的空间,然后是较小的值

我该怎么做呢


谢谢彼得。你想知道如何计算百分比吗?将电流除以最大值,再乘以100。然后,您可以根据需要格式化百分比(如“20%”、“20.2%”、…)


你想知道如何计算百分比吗?将电流除以最大值,再乘以100。然后,您可以根据需要格式化百分比(如“20%”、“20.2%”、…)


您正在解析
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>();
List lstdt=新列表(){
新日期时间(2010,5,5,1,10,0),
新日期时间(2011,5,5,2,10,0),
新日期时间(2010,8,5,1,10,0),
新日期时间(2010,5,5,1,10,0),
新日期时间(2011,11,5,1,10,0),
新日期时间(2010,12,5,1,10,0),
};            
double maxval=lstdt.Max(c=>c.TimeOfDay.TotalMinutes);
List lstpercent=lstdt.Select(d1=>d1.TimeOfDay.TotalMinutes/maxval*100.00).ToList();

您正在解析
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>();
List lstdt=新列表(){
新日期时间(2010,5,5,1,10,0),
新日期时间(2011,5,5,2,10,0),
新日期时间(2010,8,5,1,10,0),
新日期时间(2010,5,5,1,10,0),
新日期时间(2011,11,5,1,10,0),
新日期时间(2010,12,5,1,10,0),
};            
double maxval=lstdt.Max(c=>c.TimeOfDay.TotalMinutes);
List lstpercent=lstdt.Select(d1=>d1.TimeOfDay.TotalMinutes/maxval*100.00).ToList();

时间跨度是两个日期时间之间的差异,以某种时间单位表示。您正在分析日期时间。你会得到一个格式异常:

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;

希望有帮助。(:

Timespan是两个DateTime之间在某些时间单位内的差异。您正在解析一个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;

希望有帮助。(:

t1.TimeOfDay.TotalMinutes
将是正确的方式Percentage=totalMin/100*someMinIn如果起点是上午12点的话)@v4 Vendetta你能详细说明我的分钟代码有什么问题吗?DateTime实际上是一个格式为hh:mm:ss的字符串,我将其转换为DateTime。@PeterP为什么要执行
ToString()
在字符串上?
t1.TimeOfDay.TotalMinutes
应该是正确的方式Percentage=totalMin/100*someMinIn如果起点是12AM))@v4 Vendetta你能详细说明一下我的分钟代码有什么问题吗?DateTime实际上是一个hh:mm:ss格式的字符串,我将其转换为DateTime。@PeterP为什么要对字符串执行
ToString()
?因为它们最初不是DateTime对象,而是hh:mm:ss格式的字符串(使用秒表填充)将它作为字符串保存并使用timespan检索分钟数不是更好吗?谢谢,哦,好的!我刚看到你的评论,以为是DateTime://t是DateTime(:因为它们最初不是DateTime对象,而是hh:mm:ss格式的字符串(使用秒表填充)将它作为字符串保存并使用timespan检索分钟数不是更好吗?谢谢。哦,好吧!我刚刚看到你的评论,并认为它是一个DateTime://t是一个DateTime(: