压裂功能失去精度

时间:2010-03-16 12:40:13

标签: delphi delphi-7 precision floating-accuracy tdatetime

我有一个TDateTime变量,在运行时为40510.416667分配了一个值。当我使用Frac函数将时间提取到TTime类型变量时,它将其设置为0.41666666666。为什么它改变了值的精度,并且有一个工作区来保持原始值的精度,即。将其设置为0.416667。

4 个答案:

答案 0 :(得分:2)

TDateTime是一个浮点数。某些数字不能完全表示为浮点数。 0.416667 / 0.41666666666似乎是另一个。

您可以舍入5或6位数字进行显示。这可以让你精确到1秒左右。

答案 1 :(得分:2)

What Every Computer Scientist Should Know About Floating-Point Numbers应该提供帮助,就像SO自己的Precision of Floating Point一样 - 这将为您提供一些详细信息,以便与杰夫的答案一致。

答案 2 :(得分:1)

精度损失的原因之一是TDateTime是double,Frac的参数和返回值是Extended类型。

将浮点数从一种类型转换为另一种类型时,某些精度可能会丢失。 (对它们进行算术时也是如此)。

要正确比较浮点值,您应该使用Math。单位的CompareValue函数。

答案 3 :(得分:1)

感谢您对此的所有帮助,非常感谢。为了解决由于精度变化引起的问题,我使用了CompareTime函数而不是> =或< =运算符来比较时间。