我观察到一些关于EncodeDateTime
and EncodeTime
方法,我正在寻求一些解释。
procedure SomeTestCase;
var
time: TTime;
dateTime: TDateTime;
begin
time := EncodeTime(8, 0, 0, 0);
date := EncodeDateTime(2012, 11, 2, 8, 0, 0, 0);
Assert(time = TimeOf(date)); //Fails
end;
我发现的是date
的小时部分评估为7:59:59
代替8:00:00
。但如果我设置的小时部分time
and date
到 9,断言通过并且date
评估为预期值。有些时间可以工作,有些则不能。有人可以解释一下发生了什么事吗?
时间值(TTime
, TDate
, TDateTime
)实际上是一个double
(即浮点值),日期用整数部分编码,时间用小数部分编码。测试浮点值的相等性总是有风险的。
您可以使用SameTime(time, date)
反而。这正确地补偿了“数字大惊小怪”:Result := Abs(Frac(A) - Frac(B)) < OneMillisecond;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)