Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何用c语言进行计算#_C#_Linq_Parsing_Math_Timespan - Fatal编程技术网

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小时是的,你可以,但是你需要使用不同的方法。让我更新一下。