我正在尝试用 C++ 制作一个通话计费程序。这个小程序的功能之一是能够根据输入的时间段更新折扣时间内的折扣分钟和营业时间内的正常价格分钟。
用户首先以字符串形式输入时间,例如 22:00
然后我有一个函数,它接受字符串并将其转换为整数。比如上面的 22:00 变成 2200
然后我有另一个帮助函数,它接受一个 int,上面的 int 并将其转换为十进制时间。
double turnTimeToDecimal(int timeRaw){
double decimalTime;
decimalTime = timeRaw * 0.01;
return decimalTime;
}
没有折扣的营业时间在上午 8 点到 18.30 点之间,为了处理这个功能,我更新了一个 for 循环中的两个计数器,从 0 到 1417 分钟(24 小时):
double myStartDecimal = 0.0;
double myStopDecimal = 0.0;
myStartDecimal = turnTimeToDecimal(myStartRaw);
myStopDecimal = turnTimeToDecimal(myStopRaw);
//hours and minutes start
int hourStart = (int)floor(myStartDecimal);
int minuteStart = (int)round(100*(myStartDecimal - hourStart));
//hours and minutes stop
int hourStop = (int)floor(myStopDecimal);
int minuteStop = (int) round(100*(myStopDecimal - hourStop));
int totalMinutesPremium = 0;
int totalMinutesDiscount = 0;
int i = 0;
int k = 0;
for(k = (hourStart* 60) + minuteStart; k < (hourStop * 60) + minuteStop + round(((double)minuteStop/100)); k++){
//will update the corresponding counter depending
//on the time stretch, business hours 8.00 - 18.30.
if(hourStart >= 8 && hourStop < 18.5){
totalMinutesPremium++;
}else{
totalMinutesDiscount++;
}
}
//will give total minutes
cout << " k is: " << k << endl;
//will give the total number of minutes during the business hours and
//the total number of minutes during the discount hours(non-bussiness hours)
cout << "Total minutes premium " << round(totalMinutesPremium) <<
" Total Minutes discount " << round(totalMinutesDiscount) << endl;
但是,该程序确实会检测输入的时间段是否在营业时间内,但在一种情况下除外。例如,如果时间在 7:30 和 8:30 之间(营业时间在 7:59-18:30 之间),则它不会返回营业时间内的分钟组合,我预计营业时间内是 30 分钟和分钟我预计折扣时间也是 30 分钟,因为折扣时间在 07:59 结束,并在 18:31 再次开始。
希望我说清楚了。