加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么TTime比较会产生意想不到的结果?

发布时间:2020-12-15 09:32:04 所属栏目:大数据 来源:网络整理
导读:我观察到有关EncodeDateTime和EncodeTime方法的一些奇怪的行为,我正在寻求一些解释. procedure SomeTestCase;var time: TTime; dateTime: TDateTime;begin time := EncodeTime(8,0); date := EncodeDateTime(2012,11,2,8,0); Assert(time = TimeOf(date)); /
我观察到有关EncodeDateTime和EncodeTime方法的一些奇怪的行为,我正在寻求一些解释.

procedure SomeTestCase;
var
    time: TTime;
    dateTime: TDateTime;
begin
    time := EncodeTime(8,0);
    date := EncodeDateTime(2012,11,2,8,0);

    Assert(time = TimeOf(date)); //Fails
end;

我发现日期的小时部分评估为7:59:59而不是8:00:00.但是如果我将时间和日期的小时部分设置为9,则断言传递和日期评估为期望值.有些时间有效,有些则没有.有人可以解释一下发生了什么吗?

解决方法

时间值(TTime,TDate,TDateTime)实际上是一个double(即浮点值),日期以整数部分编码,时间由小数部分编码.测试浮点值的相等性总是有风险的.

您可以使用SameTime(时间,日期).这正确地补偿了“数字大惊小怪”:结果:= Abs(Frac(A) – Frac(B))< OneMillisecond;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读