+ -
当前位置:首页 → 问答吧 → 时间相减,半小时的地方出错

时间相减,半小时的地方出错

时间:2011-08-06

来源:互联网

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小时。


为什么是这个结果?

作者: hk2009   发布时间: 2011-08-06

浮点数的问题。小数后那么多位应是没有问题的,计算机时钟也不可能精确到那么多位。

作者: Oraclers   发布时间: 2011-08-06

unit UDateTime;

interface

uses
  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.
//要不这样写吧?浮点数本来就不准确。

作者: rainychan2009   发布时间: 2011-08-06

热门下载

更多