0

我有一个场景,系统会在 18 个月内计算每月费用。比如说,费用是 10$ ;然后将计算 $10/18 = $0.56 每月。

如果客户在 18 个月期间中途取消服务。我需要找到他使用的月数并退还剩余的月数。例如:客户于2012年6月2日创建并于2012年8月13日取消,这意味着他完全使用了2个月,因此我需要退款($10/18)* (18-2)

4

3 回答 3

0

由于这只会在几年的范围内需要 - 我会手动构建每个月初的 time_t 值的查找表。

然后记录他们启动服务的 time_t,现在检查 time_t 然后扫描表中的值的数量。

ps. time_t is the 'C' stdlib basis for time functions, it's the number of seconds since 1970 and is used by all the functions in time.h

于 2012-08-04T15:24:35.030 回答
0

您可以创建一个方法来计算它,但是更好的方法是编写一个 ADT 来表示一个日期对象,该对象应该自己完成所有计算

int chargeFor(int createdD,int createdM,int createdY,int canceledD,int canceledM,int canceledY){
   int deltaD = canceledD - createdD;
   int deltaM = canceledM - createdM;
   int deltaY = canceledD - createdD;

   if( deltaD != 0 )
      return result = deltaY * 12 + deltaM + 1; 
   else 
      return result = deltaY * 12 + deltaM; 

}
于 2012-08-04T15:34:19.190 回答
0

如果我理解正确,您想计算两个日期之间的整月数......所以算法可以是这样的:

curDate  = fromDate;
curDate.month++;
totMonths = 0;
while (curDate < fromDate) {
    totMonths++;
    if (curDate.month == 12) {
        curDate.month = 1;
        curDate.year++;
    } else curDate.month++;
}
于 2012-08-04T15:27:46.270 回答