有一个时段价格表:
begintime    endtime      price
0:00         7:59           100
8:00         20:00          200
20:00        23:59          300如何计算一段时间之间的费用?如
2007-5-24 17:00  ------2007-5-26 21:00

解决方案 »

  1.   

    '用VB如下
    Function GetSum(ByVal Date1 As Date, ByVal date2 As Date)
    Dim h As Long, s1 As Long, s2 As Long, sum1 As Long, sum2 As Long
    h = DateDiff("h", Date1, date2)
    sum1 = h \ 24 * (800 + 2400 + 1200)
    s1 = Hour(Date1)
    s2 = Hour(date2)
    If s1 < 8 Then
        s1 = (8 - s1) * 100 + 3600
    ElseIf s1 < 20 Then
        s1 = (20 - s1) * 200 + 1200
    Else
        s1 = (24 - s1) * 300
    End If
    If s2 < 8 Then
        s2 = (8 - s2) * 100 + 3600
    ElseIf s2 < 20 Then
        s2 = (20 - s2) * 200 + 1200
    Else
        s2 = (24 - s2) * 300
    End If
    sum2 = s1 - s2
    If s2 < s1 Then sum2 = sum2 + 4400
    GetSum = sum1 + sum2
    End Function
      

  2.   

    写好了,不过我这个函数仅适用于starttime和endtime不相等的情况
    function TForm1.getmoney(starttime,endtime:string):double;
    var
    i:integer;
    money:double;
    begin
    money:=0;
    if adotable.locate('begintime',starttime,[]) then
    while adotable.fieldbyname('endtime').asstring<>endtime do
    begin
    money:=money+adotable.fieldbyname('price').asfloat;
    adotable.next;
    end;
    getmoney:=money;
    end;
      

  3.   

    感觉有点像两个小孩儿在炫耀自己一样,谦虚一点吧,你那个的是VB,这个地方是delphi块,我那个前面加个判断同样也能适应任意时间段
      

  4.   

    hys_427() ( ) 信誉:100    Blog   加为好友  2007-5-26 18:47:52  得分: 0  
       
    感觉有点像两个小孩儿在炫耀自己一样,谦虚一点吧,你那个的是VB,这个地方是delphi块,我那个前面加个判断同样也能适应任意时间段我说不是VB的???
    你要是会早回答!要是不会别说别人的不对,你在我后边说是什么意思??
    hys_427() ( ) 信誉:100    Blog   加为好友  2007-5-26 10:14:57  得分: 0  
    我给你写个求任意时间段费用的函数,一会儿给你贴上去意思很明显,你给一个任意时间段的,我的不行?不行你照我的翻译还没翻译全面。
    我这人很不知道谦虚,可是你又想当SB又想LPD好意思说我谦虚点。我又不是照抄你的。