我试图使用下面给出的公式来预测c#中的潮流:
该程序已在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中都有完全相同的答案。那么为什么分歧的答案有所不同呢?
答案 0 :(得分:2)
根据提供的PDF格式,t
,t1
和t2
的格式为十进制小时,因此您需要.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
。