路费的滞纳金是这样计算的:如果你是今年的6月18日去缴今年的路费(上次费末日期为去年的12月31日),
那滞纳金的计算天数是这样计算的:
   一月   二月    三月   四月   五月   六月
   31     28      31     30     31    18
   28     31      30     31     18
   31     30      31     18
   30     31      18
   31     18
   18+169    138      110    79     49     18
————————————————————————————
+   563意思就是一月份的路费欠了169天,二月份的路费欠了138天,,
六月份的路费欠了18天,一共欠了563天的路费X=上次费末日期    Y=缴费日期(一定〉上次费末日期)如何求欠缴路费的天数谁可以给我一个公式?急!!!

解决方案 »

  1.   

    http://218.56.11.178:8020/web/index.aspx->下载基地->例程-经典应用->时间差计算大全
      

  2.   

    这是一个特殊的日期计算呀,单是用DaysBetween、DaySpan不行的
      

  3.   

    不明白为什么要重复累加???
    本来DELPHI中的日期直接相减就可以了,结果是FLOAT类型的,取整就可以了。
    但是你这样的算法要重复累加日期我觉得有问题,那不是多算了天数了吗?
    如果真的要这样重复算的话,那只能先判断总欠费时间是否跨年,然后逐年累加各月份的天数来得到结果了。
      

  4.   

    这个问题好做。先弄一个数组t,把每个月天数放里面
    然后对于现在的月份i,循环
    for k=1 to i
       for j=k to i
         m=m+t[j]
       next
    next
    m=m+剩余天数
      

  5.   

    function GetDays(ANow, AThen: TDate): TDays;
    begin
      SetLength(Result, 1);
      Result[0] := DaysBetween(ANow, AThen);
      while ANow < AThen do
      begin
        ANow := IncMonth(ANow);
        ANow := EncodeDate(YearOf(ANow), MonthOf(ANow), 1);
        SetLength(Result, Length(Result)+1);
        Result[Length(Result)-1] := DaysBetween(ANow, AThen)+1;
      end;
      SetLength(Result, Length(Result)-1);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      Days: TDays;
      I: Integer;
    begin
      Days := GetDays(StrToDate('2002-12-31'), StrToDate('2003-6-18'));
      for I := Low(Days) to High(Days) do
      begin
        ShowMessage(IntToStr(Days[I]));
      end;
    end;—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  6.   

    zxjss你试一下这段代码,不知能否帮到你,我没有调试。
    //--------------------------------------------------------------------
    //  过程名:    CalcLateFee
    //  描述:      计算滞纳金
    //  参数:      LastPayDate  上次交费日期
    //             PayDate      本次交费日期
    //             rate         滞纳金比率
    //  返回值:    应该交的滞纳金(不含本金)
    //--------------------------------------------------------------------
    function TForm1.CalcLateFee(const LastPayDate, PayDate: TDateTime;
      const rate: real) : real;
    var
      wLastPayYear, wLastPayMonths, wLastPayDays : WORD;
      wPayYear, wPayMonths, wPayDays : WORD;
      wYear, wMonths, wDays : WORD;
    begin
      DecodeDate(LastPayDate, wLastPayYear, wLastPayMonths, wLastPayDays);
      DecodeDate(PayDate, wPayYear, wPayMonths, wPayDays);  if wPayYear = wLastPayYear then begin
        wDays:=DaysBetween(LastPayDate, PayDate) - 1;
      end
      else if wPayYear > wLastPayYear then begin
        wDays:=EndOfTheDay(LastPayDate) - LastPayDate - 1;
        wMonths:=(wPayYear - wLastPayYear ) * MonthsPerYear + (wPayMonths - wLastPayMonths) - 1;
        wYear:=wLastPayYear;
        Repeat
          wPayMonths:=wPayMonths + 1;
          if wPayMonths > 12 then begin
            Inc(wYear);
            wPayMonths:=1;
          end;
          wDays:=wDays + DaysInAMonth(wYear, wPayMonths);
          Dec(wMonths);
        Until wMonths = 0;
      end;
      Result:=rate * wDays;
    end;
      

  7.   

    lxpbuaa(桂枝香在故国晚秋)???TDays改如何定义?就是声明啦???
      

  8.   

    lxpbuaa(桂枝香在故国晚秋)在吗?TDays该如何定义?就是声明啦???急!!!其它人知道吗?应该是数组,在程序里该如何定义?放在何处?
      

  9.   

    TDays = Array of Integer;忘写了对不起,这是自定义类型————————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    ————————————————————————————————————
      

  10.   

    看看这个:
    type TDateTime = type Double;应该可以想到了吧?!
    var
      d1: TDateTime;
      d2: TDateTime;
      dt: real;
    begin
      //给d1, d2赋值
      dt := d2 - d1;
      //dt就是两者相差的天数
    end;
      

  11.   

    顺便说一下:TDateTime = type Double; 是在System.pas中定义的。
      

  12.   

    lxpbuaa(桂枝香在故国晚秋)在吗?还是不懂!这句不对吧:
    TDays = Array of Integer;如果对,放在何处?type ?  var?还有就是day的定义啦:是这样吗:
    var
      days:Tdays;想不通,请指教!谢谢了!