我有一些里程和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;
这是对的吗?有一个更好的方法吗?谢谢!
答案 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在编辑后得到了它......