路费的滞纳金是这样计算的:如果你是今年的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=缴费日期(一定〉上次费末日期)如何求欠缴路费的天数谁可以给我一个公式?急!!!
那滞纳金的计算天数是这样计算的:
一月 二月 三月 四月 五月 六月
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=缴费日期(一定〉上次费末日期)如何求欠缴路费的天数谁可以给我一个公式?急!!!
本来DELPHI中的日期直接相减就可以了,结果是FLOAT类型的,取整就可以了。
但是你这样的算法要重复累加日期我觉得有问题,那不是多算了天数了吗?
如果真的要这样重复算的话,那只能先判断总欠费时间是否跨年,然后逐年累加各月份的天数来得到结果了。
然后对于现在的月份i,循环
for k=1 to i
for j=k to i
m=m+t[j]
next
next
m=m+剩余天数
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;—————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
//--------------------------------------------------------------------
// 过程名: 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;
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
type TDateTime = type Double;应该可以想到了吧?!
var
d1: TDateTime;
d2: TDateTime;
dt: real;
begin
//给d1, d2赋值
dt := d2 - d1;
//dt就是两者相差的天数
end;
TDays = Array of Integer;如果对,放在何处?type ? var?还有就是day的定义啦:是这样吗:
var
days:Tdays;想不通,请指教!谢谢了!