我正在使用C#.net。我想通过减去两个双精度值找到总小时数。我尝试了下面的代码,
double val = 150.20;
double val1 = 30.50;
DateTime x = DateTime.FromOADate(val);
DateTime y = DateTime.FromOADate(val1);
double res = (x - y).TotalHours;
结果应该是119.40小时。但我没有得到正确的答案。可以任何1帮我如何减去两个双精度值并获得总数。
答案 0 :(得分:3)
你可以这样做:
TimeSpan val = TimeSpan.FromHours(150.20);
TimeSpan val2 = TimeSpan.FromHours(30.50);
TimeSpan difference = val.Subtract(val2);
Console.WriteLine("{0} hours and {1} minutes",
difference.Hours, difference.Minutes);
Console.WriteLine("or, {0} hours in total",
difference.TotalHours); // displays 119.7
如果在150.20之间你不是指150.20小时而是150小时20分钟,那么将前两行更改为:
TimeSpan val = new TimeSpan(150, 20, 0);
TimeSpan val2 = new TimeSpan(30, 50, 0);
另一方面,如果你不需要分钟/小时算术,为什么不计算
double val = ...;
double val2 = ...;
double difference = val - val2;
答案 1 :(得分:2)
如果150.20表示150小时20分钟而30.50表示30小时50分钟,则结果应为119.30而不是119.40
double val = 150.20;
double val1 = 30.50;
string[] temp1 = val.ToString().Split('.');
string[] temp2 = val1.ToString().Split('.');
TimeSpan ts1 = TimeSpan.FromHours(double.Parse(temp1[0])) + TimeSpan.FromMinutes(double.Parse(temp1[1] + "0"));
TimeSpan ts2 = TimeSpan.FromHours(double.Parse(temp2[0])) + TimeSpan.FromMinutes(double.Parse(temp2[1] + "0"));
TimeSpan ts = ts1.Subtract(ts2);
double totalHours = ts.TotalHours;
string[] temp = totalHours.ToString().Split('.');
Console.WriteLine(temp[0] + "." + double.Parse("0." + temp[1]) * 60);
答案 2 :(得分:0)
从另一个日期中减去一个日期会返回一个TimeSpan,其编码方式与DateTime不同。 因此,当您将TimeSpan转换为double时,您会获得与您在起始位置时可能直观期望的数字不同的数字。
在这种情况下,val
和val1
对应于日期:
29/05/1900 04:48:00和
29/01/1900 12:00:00
结果时间跨度是119天16小时48分钟,当转换回双倍时,给你2872.799999
我假设val
和val1
代表DateTimes,所以只需使用TimeSpan类型进行其他地方建议的计算。
如果val
和val1
代表小时数,那么只需使用
double hours = val - val1;
如果150.20表示150小时20分钟,那么请使用:
TimeSpan GetTimeSpan(double val)
{
int hours = (int)Math.Floor(val);
int minutes = (int)Math.Round((val - hours) * 100);
return new TimeSpan((int)hours, minutes, 0);
}
....
TimeSpan ts1 = GetTimeSpan(val);
TimeSpan ts2 = GetTimeSpan(val1);
TimeSpan diff = ts1 - ts2;
double resultHours = Math.Floor(diff.TotalHours) + ((double)diff.Minutes/100);
结果将是119.30
答案 3 :(得分:0)
TimeSpan dt1 = TimeSpan.FromHours(150.20);
TimeSpan dt2 = TimeSpan.FromHours(30.50);
TimeSpan difference = dt1 - dt2;
Label1.Text = difference.Hours.ToString() + ":" + difference.Minutes.ToString();
答案 4 :(得分:0)
我不确定我是否完全理解您的要求,但认为这些时间是参考时间
如果是这种情况,请尝试此
double val = 150.20;
double val1 = 30.50;
DateTime referenceTime = DateTime.Now; // Or whatever is the time since when you have the hours
DateTime valDateTime = referenceTime.AddHours(val);
DateTime val1DateTime = referenceTime.AddHours(val1);
double hours = Math.Abs((val1DateTime - valDateTime).TotalHours);
答案 5 :(得分:0)
如果我们认为Val
和Val1
基于TimeSpan
的结果小时数如下:
double val = 150.20;
double val1 = 30.50;
TimeSpan x = TimeSpan.FromHours(val);
TimeSpan y = TimeSpan.FromHours(val1);
double res = x.Subtract(y).TotalHours; // Display 119.7
如果我们假设Val
和Val1
为Days
结果如下:
double val = 150.20;
double val1 = 30.50;
TimeSpan x = TimeSpan.FromDays(val);
TimeSpan y = TimeSpan.FromDays(val1);
double res = x.Subtract(y).TotalHours; // Display 2872.8