Timespan Arithmetics预测潮流

时间:2016-11-10 05:45:20

标签: c# excel excel-2010

我试图使用下面给出的公式来预测c#中的潮流:

enter image description here

该程序已在excel中完成,但是在将其转换为c#时遇到了一些问题。

这是excel中的公式:

=PI()*((C18)/(C19)+1)

细胞C18和C19只包含两个日期细胞的减法

在C#中,我很难找到A.
找到答案有两个问题。
问题1:当我执行(t - t1)/(t2 - t1)时,C#中的答案为0,但在excel中,答案为1.
问题2:等式结束时的+1。如何在timeSpan中添加一个数字(在excel中这可行,可能因为它们将其解析为日期时间值?)

这是我的代码:

DateTime t = new DateTime(2016, 6, 21, 13, 41, 00);
DateTime t1 = new DateTime(2016, 6, 21, 7, 13, 00);
DateTime t2 = new DateTime(2016, 6, 21, 13, 57, 00);
double h1 = 1.421;
double h2 = 2.337;
double h2_minus_h1 = h2 - h1;
TimeSpan t_minus_t1 = TimeSpan.FromTicks(t.Subtract(t1).Ticks);
TimeSpan t2_minus_t1 = TimeSpan.FromTicks(t2.Subtract(t1).Ticks);
TimeSpan MainCalculationForA = TimeSpan.FromTicks((t.Subtract(t1).Ticks) / (t2.Subtract(t1).Ticks));
MessageBox.Show(MainCalculationForA.ToString());

(t - t1)/(t2 - t1)的答案是:00:00:00,而在excel中只有1个 注意:公式取自此处 tide prediction pdf

注意:(t - t1)(t2 - t1)在C#和excel中都有完全相同的答案。那么为什么分歧的答案有所不同呢?

1 个答案:

答案 0 :(得分:2)

根据提供的PDF格式,tt1t2的格式为十进制小时,因此您需要.TotalHours而不是

DateTime t = new DateTime(2016, 6, 21, 13, 41, 00);
DateTime t1 = new DateTime(2016, 6, 21, 7, 13, 00);
DateTime t2 = new DateTime(2016, 6, 21, 13, 57, 00);
double h1 = 1.421;
double h2 = 2.337;

double t_min_t1 = (t - t1).TotalHours;
double t2_min_t1 = (t2 - t1).TotalHours;

double A = Math.PI*(t_min_t1/t2_min_t1 + 1);
double h = h1 + (h2 - h1)*((Math.Cos(A) + 1)/2);

MessageBox.Show(h.ToString());

最终结果为2.33345960154238