时间相减,半小时的地方出错
时间: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小时。
为什么是这个结果?
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.
//要不这样写吧?浮点数本来就不准确。
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28