背景:
我有一个整数倍的数组给出0830为08:30,1745为17:45等。
我需要计算时间之间的时差。所以我首先将整数倍转换为浮点时间除以100.0。这意味着0830将成为8.30。
int inTime = 0830, outTime = 1745;
float newIntime = inTime/100.0;
float newOutTime = outTime/100.0;
下一步,这是我的问题,是:如何将小数部分除以0.6,得到8.50。这是我能够以有意义的格式减去/添加时间并获得正确时差的唯一方法。
我无法弄清楚(或查找)一种乘法小数部分的方法,即仅“访问”小数点右侧的内容。任何帮助将不胜感激!
答案 0 :(得分:2)
float intPart = floor(newInTime);
float converted = intPart + (newInTime - intPart) / 0.6;
最好不要为此目的使用float。看其他人的回答。
答案 1 :(得分:2)
首先不要转换为浮动。使用模数来提取分钟:
int inTime = 830;
int inHours = inTime / 100;
int inMinutes = inTime % 100;
int inTotalMinutes = inHours * 60 + inMinutes;
此外,0830
不是有效的文字。前导零使其被解释为八进制数,而8不是有效的八进制数。
答案 2 :(得分:0)
你不想在浮点数中这样做,因为你可能会失去精确度。
我建议按照以下方式做点什么:
// or use std::tm per Potatoswatter's comment
struct Time
{
int hours;
int minutes;
Time(int time)
{
hours = time/100;
minutes = time-hours*100;
}
};
Time operator-(const Time& a, const Time& b)
{
// You could also just return these minutes and be done with it
int minutes (a.hours-b.hours)*60 + (a.minutes-b.minutes);
Time result;
result.hours = minutes/60;
result.minutes = minutes-result.hours;
}
int main()
{
Time inTime(830), outTime(1745);
Time result = inTime-outTime;
// ...
return 0;
}
要记住的另一件事是,你应该不写:
Time inTime(0830);
因为编译器会认为你在谈论八进制数(并且它不能将8作为数字)。
答案 3 :(得分:0)
对于浮点计算,将08:30转换为8.5而不是8.3更容易也更合理。从0:00起是8.5小时。转换回来也很容易。小时是小数点左边的小时,分钟是小数点右边的数字乘以60。
答案 4 :(得分:-1)
用modf提取它。这应该可以消除额外的精度损失。