为什么 TimeSpan.FromMinutes return 总小时数不正确
Why does TimeSpan.FromMinutes return incorrect total hours value
当我在 .netfiddle 上 运行 时,我预计结果为 182 小时 30 分钟。但是我却得到了 183 小时——这是为什么?好像已经过了夏令时?
TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
Console.WriteLine(tsTime.TotalHours.ToString("00") + ":" + tsTime.Minutes.ToString("00"));
因为 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);
因为四舍五入。
您正在通过 ToString
输出双精度值,其格式根据标准规则将它们四舍五入为整数值,因此 .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);
TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
Console.WriteLine(((int)tsTime.TotalHours).ToString("00") + ":" + tsTime.Minutes.ToString("00"));
输出:
182:30
当我在 .netfiddle 上 运行 时,我预计结果为 182 小时 30 分钟。但是我却得到了 183 小时——这是为什么?好像已经过了夏令时?
TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
Console.WriteLine(tsTime.TotalHours.ToString("00") + ":" + tsTime.Minutes.ToString("00"));
因为 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);
因为四舍五入。
您正在通过 ToString
输出双精度值,其格式根据标准规则将它们四舍五入为整数值,因此 .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);
TimeSpan tsTime = TimeSpan.FromMinutes((double)10950);
Console.WriteLine(((int)tsTime.TotalHours).ToString("00") + ":" + tsTime.Minutes.ToString("00"));
输出:
182:30