将表示时间的十进制数转换为小时,分钟,秒

4
我有一个十进制数,其范围在0到23.999999之间。这个十进制数代表一个时间。例如,如果这个十进制数是0.25,则它所代表的时间是上午12:15。如果这个十进制数是23.50,则它所代表的时间是晚上11:30。
我有三个变量: - 小时 - 分钟 - 秒
使用这个十进制数,如何填写小时、分钟和秒的值?

1
从用户名来看,可能是一种 .NET 语言 :P - Domenic
4个回答

11

好的,这里是一份 C# 的答案,但在大多数语言中都有相同的思路:

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

int seconds = (minutesAsADecimal - minutesAsAnInt) * 60 - DotNetDateQuestion
将其转换为整数是否会将小时部分四舍五入,如果余数> .5,则会导致不正确的结果。 - DavidB
@DavidB 将数据转换为 int 时,总是向下取整,而不是向上取整。 - Domenic
我之前在 VB 中使用了 Cint,但它的行为不像这样,所以它们肯定是不同的。 - DavidB

4
小时应该很容易。
一小时有60分钟,所以获取小数部分,将其乘以60,取整数。再次获取小数,再次乘以60,就得到了秒数。
例如,让我们使用数字20.38490。
我们知道这是第20小时,即晚上8点。
这留下了数字.38490。
将其乘以60,我们得到23.094分钟。
将.094乘以60,我们得到5秒钟。

比上面更有帮助! - BaeFell
顺便说一下,这应该是被接受的答案,而且它也与语言无关。+1 - Godwin Mathias

1

您可以使用 floor 函数来去除小时,并将分钟和秒钟作为小时的分数留下。然后,您可以再次使用 floor 函数来去除分钟作为小时的分数。这样,您就只剩下秒(作为小时的分数)。

以下是一个简单的示例,打印小时和分钟,日出时间以自午夜以来的小时分数表示。

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

0
无论您使用哪种编程语言,都可以使用数学函数:MOD和FLOOR/TRUNC来实现此操作。
假设“dec”是十进制变量。
trunc(mod(dec, 1)) => hours
trunc(mod(dec * 60, 60)) => minutes
trunc(mod(dec * 3600, 60)) => seconds

在C#中,您可以使用显式转换将十进制数截断为整数,例如:
int seconds = (int) ((dec * 3600) % 60)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接