2011-04-18 367 views
4

我有一個小數。這個小數的範圍在0到23.999999之間。這個小數代表一個時間。例如,如果小數點是0.25,那麼它表示的時間是12:15 AM。如果小數點是23.50,它表示的時間是晚上11點30分。將十進制表示時間轉換爲小時,分鐘,秒

我有三個變量: - 小時 - 分鐘 - 秒

利用這個小數,我該如何填寫HoursMinutes,並且Seconds值?

+0

什麼語言? – Marlon 2011-04-18 02:34:08

+0

從用戶名判斷,可能是一種.NET語言:P – Domenic 2011-04-18 02:35:55

回答

11

嗯,這裏是在C#的答案,但它通常是在大多數語言相同的想法:

int hours = (int)hoursDecimal; 
decimal minutesDecimal = ((hoursDecimal - hours) * 60); 
int minutes = (int)minutesDecimal; 
int seconds = (int)((minutesDecimal - minutes) * 60); 
+0

int seconds =(minutesAsADecimal - minutesAsAnInt)* 60? – DotNetDateQuestion 2011-04-18 03:37:53

+5

我看到一個問號,但我不明白這個問題... – Domenic 2011-04-18 06:15:53

+0

不會將轉換爲小數部分的int整數,如果其餘部分> .5 – DavidB 2013-06-21 07:40:26

2

時間應該很簡單。

1小時內有60分鐘,所以得到小數部分,乘以60,取整數。再次取小數點,再乘以60,然後你有秒。

例如,讓我們數20.38490

我們知道這是每小時20或8 PM。

這給我們留下了數.38490

與60相乘,我們得到23.094分鐘。

.094乘以60,我們得到5秒。

+0

比以上更有幫助! – nfell2009 2015-12-18 00:27:56

0

無論您使用的語言,您可以用數學函數做到這一點:MOD和FLOOR/TRUNC

令「DEC」是小數變量

trunc(mod(dec, 1)) => hours 
trunc(mod(dec * 60, 60)) => minutes 
trunc(mod(dec * 3600, 60)) => seconds 

在C#中,你可以截斷小數只用顯式轉換,如爲int

int seconds = (int) ((dec * 3600) % 60) 
1

您可以使用發言功能去除小時數並將minuites和秒保留爲小時的一小部分。然後,您可以再次使用地板功能在一小時內剝離minuites。你然後用秒時(作爲一個小時的分數)

一個簡單的例子,下面的打印小時,分鐘日出分數小時從午夜開始

printf("sunrise %ld:%ld, \n", 
      (long)floor(sunrise), 
       (long)(floor(sunrise * 60) - 60 * floor(sunrise))); 
相關問題