C# 潮汐预报的时间跨度算法

C# 潮汐预报的时间跨度算法,c#,excel,excel-2010,C#,Excel,Excel 2010,我试图用下面给出的公式预测c#的潮汐: 该程序已经在excel中完成,但是在将其转换为c#时,我遇到了一些问题 这是excel中的公式: =PI()*((C18)/(C19)+1) 单元格C18和C19只包含两个日期单元格的减法 在C#中,我很难找到A。 在查找A时有两个问题。 问题1:当我做(t-t1)/(t2-t1)时,C#中的答案是0,而excel中的答案是1。 问题2:等式末尾的+1。如何将数字添加到timeSpan(在excel中,这是可行的,可能是因为他们将其解析为日期时间值?

我试图用下面给出的公式预测c#的潮汐:

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


这是excel中的公式:

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

单元格C18和C19只包含两个日期单元格的减法


在C#中,我很难找到A。
在查找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
注:公式取自此处


注:
(t-t1)
(t2-t1)
在C#和excel中的答案完全相同。那么,为什么在除法时答案会有差异呢?

从提供的PDF来看,
t
t1
t2
都是十进制小时数,所以您需要
总小时数

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

问题2,您可以使用我相信的添加方法添加到时间跨度。您可以创建所需持续时间的新时间跨度,并以这种方式进行添加。问题1,我认为,因为您正在分割刻度,这些刻度是整数,您将得到0,因为您无法使用整数获得分数结果。谢谢,问题1已从Niyoko的asnswer解决。现在我只需要一个问题2的解决方案,它仍然是一样的,00:00:00是答案。
t\u-minus\u-t1/t2\u-minus\u-t1
是一个
double
,你怎么能得到
00:00
?错过了MessageBox部分。但是你能告诉我怎么加1吗。我只能在那之后把它标记为正确的一个,因为现在它被处理为一个double,当你加1时,它也应该起作用。我试试看