我如何在 C# 中进行此计算
How can i do this calculation in c#
好的,现在我有一个 TasksGroup
对象,它有一个 Taches 列表。此 Taches 列表包含许多任务,这些任务具有计算所需的名为 TaskDBA
和 TaskDuration
的属性。
但是我被 TaskDBA
指数部分困住了,不知道如何进行。感谢您的帮助!
公式:
10 x Log [ SUM( TaskDuration x 10^(0.1 x TaskDBA) +...+ TaskDuration2 x
10^(0.1 x TaskDBA2)+....]
TaskDuration
是一个字符串,TaskDBA
是一个整数
持续时间最初是从格式为 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)));
}
您不需要做任何事情Select
,直接做您需要的总和即可。如您所见,对于每个 Tach
,您需要做的就是:
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)
));
}
好的,现在我有一个 TasksGroup
对象,它有一个 Taches 列表。此 Taches 列表包含许多任务,这些任务具有计算所需的名为 TaskDBA
和 TaskDuration
的属性。
但是我被 TaskDBA
指数部分困住了,不知道如何进行。感谢您的帮助!
公式:
10 x Log [ SUM( TaskDuration x 10^(0.1 x TaskDBA) +...+ TaskDuration2 x 10^(0.1 x TaskDBA2)+....]
TaskDuration
是一个字符串,TaskDBA
是一个整数
持续时间最初是从格式为 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)));
}
您不需要做任何事情Select
,直接做您需要的总和即可。如您所见,对于每个 Tach
,您需要做的就是:
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)
));
}