2016-10-16 89 views
0

当我在.netfiddle上运行此项时,我预计结果为182小时30分钟。但是,我得到了183个小时 - 这是为什么?就好像夏令时发生了一样?为什么TimeSpan.FromMinutes返回不正确的总小时数值

TimeSpan tsTime = TimeSpan.FromMinutes((double)10950); 
Console.WriteLine(tsTime.TotalHours.ToString("00") + ":" + tsTime.Minutes.ToString("00")); 

回答

0

因为30分钟为0.5小时,所以当你使用它的ToString()使其全方位小时将其转换。所以四舍五入如果你想圆的输出然后绕着它作为给你182:30

TimeSpan tsTime = TimeSpan.FromMinutes((double)10950); 
Console.WriteLine(((int)tsTime.TotalHours).ToString("00") + ":" + tsTime.Minutes.ToString("00")); 

它可以解决问题

,如果你想实际然后它会给182.5:30

Console.WriteLine(tsTime.TotalHours+ ":" + tsTime.Minutes); 
+0

如果添加10分钟到原来分钟Math.Round不起作用。它会给183:40,但预期的结果是182:40 –

+0

@JianpingLiu感谢您的观点,更新 – Mostafiz

0

这是因为四舍五入。

您正在通过ToString输出一个double值,其格式会根据标准规则将它们舍入为整数值,所以.5会舍入到下一个整数值。

如果你检查实际值,你会发现它是182.5如你所料。

Console.WriteLine(tsTime.TotalHours.ToString() + ":" + tsTime.Minutes.ToString()); 

输出

182.5:30

需要截断值来获得整体的总小时数(你可以失去.ToString的值是整数

Console.WriteLine(Math.Truncate(tsTime.TotalHours) + ":" + tsTime.Minutes); 

或甚至:

Console.WriteLine((int)tsTime.TotalHours + ":" + tsTime.Minutes); 
0
 TimeSpan tsTime = TimeSpan.FromMinutes((double)10950); 
     Console.WriteLine(((int)tsTime.TotalHours).ToString("00") + ":" + tsTime.Minutes.ToString("00")); 

输出:

182:30

相关问题