C ++将十进制小时转换为小时,分钟和秒

时间:2009-12-14 22:07:40

标签: c++ time decimal

我有一些里程和MPH的速度,我已经转换为以该速度行驶该距离所需的小时数。现在我需要将此十进制数转换为小时,分钟和秒。我该怎么做呢?我现在最好的猜测是:

double time = distance / speed;
int hours = time; // double to integer conversion chops off decimal
int minutes = (time - hours) * 60;
int seconds = (((time - hours) * 60) - minutes) * 60;

这是对的吗?有一个更好的方法吗?谢谢!

4 个答案:

答案 0 :(得分:2)

我不知道c ++函数是否在我的头脑中,但是这个“伪代码”应该可以工作。

double time = distance / speed;
int hours = time;
double minutesRemainder = (time - hours) * 60;
int minutes = minutesRemainder;
double secondsRemainder = (minutesRemainder - minutes) * 60;
int seconds = secondsRemainder;

纠正不需要楼层。

关于它不适用于负面时代的评论,你不能在物理学上有负距离。我会说这是用户输入错误,而不是编码器错误!

答案 1 :(得分:1)

我不知道这是否更好......实际上我不确定它是否正确,因为我没有测试它,但我会先将小时数转换为总秒数,然后将其转换回小时/分钟/秒。它看起来像是:

int totalseconds = time * 3600.0;

// divide by number of seconds in an hour, then round down by casting to an integer.
int hours = totalseconds/3600;

// divide by 60 to get minutes, then mod by 60 to get the number minutes that aren't full hours
int minutes = (totalseconds/60) % 60;  

// use mod 60 to to get number of seconds that aren't full minutes
int seconds = totalseconds % 60;  

答案 2 :(得分:0)

我说你做得对。 : - )

虽然我应该补充一点,如果Aequitarium Custos提供的方法更具可读性或优先性,请务必使用该方法。有时,一次计算一个数据元素更容易,并从刚计算的数据元素中计算下一个数据元素,而不是总是从第一个数据开始使用绝对公式。

最后,只要你的数学是正确的(我认为是这样),你就可以自己编写代码了。

答案 3 :(得分:0)

一个。检查速度是否不为0

湾把一个双重放入int恕我直言是不好的编程。 使用楼层(假设时间是积极的......)

℃。如果速度和距离是int - 时间的结果将是错误的......

d。 @Aequitarum Custos在编辑后得到了它......