var
      i:Extended;
      j:real;
begin      i:=dtpEndTime.DateTime-dtpBeginTime.DateTime;
      j:=i*24;
      lbTongjiTime.caption:= FloatToStr(j)+'小时';
end;想计算两个datetimepicker控件之间的时间长度,转换成小数输出。
初始:dtpBeginTime  8:00   dtpEndTime 8:00 调整dtpEndTime到 8:30  计算结果为0.5000000000001小时。如果改变:dtpBeginTime  9:00   dtpEndTime 9:30 计算结果却没错误,为0.5小时。
为什么是这个结果?

解决方案 »

  1.   

    unit UDateTime;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TTimeRange = packed record
        FTimeBegin, FTimeEnd: TDateTime;
      end;  TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation
    uses
      DateUtils;{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
    var
      tr: TTimeRange;
      ret: Double;
    begin
      tr.FTimeBegin := StrToDateTime('08:00:00');
      tr.FTimeEnd   := StrToDateTime('08:30:00');
      ret := Hoursbetween(tr.FTimeBegin, tr.FTimeEnd) + MinutesBetween(tr.FTimeBegin, tr.FTimeEnd) / 60;
      ShowMessage(FloatToStr(ret));
    end;end.
    //要不这样写吧?浮点数本来就不准确。