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

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

概述我观察到有关EncodeDateTime和EncodeTime方法的一些奇怪的行为,我正在寻求一些解释. procedure SomeTestCase;var time: TTime; dateTime: TDateTime;begin time := EncodeTime(8, 0, 0, 0); date := EncodeDateTime(2012, 11 我观察到有关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)); //Failsend;

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

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

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

总结

以上是内存溢出为你收集整理的delphi – 为什么TTime比较会产生意想不到的结果?全部内容,希望文章能够帮你解决delphi – 为什么TTime比较会产生意想不到的结果?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1265400.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存