C# 我如何用c语言进行计算#
好的,现在我有一个C# 我如何用c语言进行计算#,c#,linq,parsing,math,timespan,C#,Linq,Parsing,Math,Timespan,好的,现在我有一个TasksGroup对象,它有一个链接列表。此链接列表包含许多任务,这些任务具有计算所需的名为TaskDBA和TaskDuration的属性 但是我被困在任务dba指数部分,不知道如何继续。谢谢你的帮助 公式: 10 x日志[总和(任务持续时间x 10^(0.1 x任务DBA)+…+任务持续时间2 x 10^(0.1 x TaskDBA2)+..] TaskDuration是一个字符串,TaskDBA是一个int 持续时间最初是从HH:MM:SS格式的输入框中获取的,因此我在这
TasksGroup
对象,它有一个链接列表。此链接列表包含许多任务,这些任务具有计算所需的名为TaskDBA
和TaskDuration
的属性
但是我被困在任务dba
指数部分,不知道如何继续。谢谢你的帮助
公式:
10 x日志[总和(任务持续时间x 10^(0.1 x任务DBA)+…+任务持续时间2 x
10^(0.1 x TaskDBA2)+..]
TaskDuration
是一个字符串,TaskDBA
是一个int
持续时间最初是从HH:MM:SS格式的输入框中获取的,因此我在这里所做的是使用GetDuration
方法将持续时间转换为TimeSpan
对象
private TimeSpan GetDuration(string duration)
{
var value = duration.Split(':').Select(int.Parse).ToArray();
var datetime = new TimeSpan(value[0], value[1], value[2]);
return datetime;
}
我一直坚持的计算方法是
10^(0.1*TaskDBA)
环节=任务列表
public double CalculateExposition(TasksGroup group)
{
// i thought this could be usefull
var GetDBA = group.Taches.Select(x => (double)(x.TaskDBA));
//i first use x.TotalHours because i need my TimeSpan to be converted to decimal
var sum = group.Taches.Select(x => GetDuration(x.TaskDuration)).Sum(x => x.TotalHours *
Math.Pow(10,GetDBA.));
return sum;
}
我认为您应该能够像这样简化您的方法:
public double CalculateExposition(TasksGroup group)
{
return 10 * Math.Log(group.Taches.Sum(x => TimeSpan.Parse(x.TaskDuration).TotalHours * Math.Pow(10, x.TaskDBA / 10.0)));
}
您不需要进行任何选择
,只需直接进行所需的求和即可。如您所见,对于每个转速表
,您只需执行以下操作:
TimeSpan.Parse(x.TaskDuration).TotalHours * Math.Pow(10, x.TaskDBA / 10.0)
**更新** 由于输入字符串中的小时数可能大于23且
TimeSpan.Parse
和ParseExact
不支持这一点,因此您需要:
private TimeSpan GetDuration(string duration)
{
var parts = duration.Split(':').Select(x => int.Parse(x)).ToList();
return new TimeSpan(parts[0], parts[1], parts[2]);
}
public double CalculateExposition(TasksGroup group)
{
return 10 * Math.Log(group.Taches.Sum(x =>
GetDuration(x.TaskDuration).TotalHours * Math.Pow(10, x.TaskDBA / 10.0)
));
}
您可以将
GetDuration
替换为调用TimeSpan.ParseExact
。对于内部Sum
,使用与x
不同的东西,这样就不会与Select的x
混淆。不需要将TaskDBA
转换为两倍。对于0.1 x TaskDBA
我只需要执行TaskDBA/10.0
.idk如果您仍然在这里,但可能应该亮起灯,比如说用户输入03:03:03,这不会有问题,但是如果他输入33:33:33,我得到:未处理的异常:System.OverflowException:无法解析TimeSpan,因为至少有一个数字分量超出范围或包含太多数字。是否dea为什么?谢谢!哦,我想你不能超过24小时是的,你可以,但是你需要使用不同的方法。让我更新一下。