2016-10-16 85 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

相關問題