我有一个 TDateTime 变量,它在运行时被赋值为 40510.416667。当我使用 Frac 函数将时间提取到 TTime 类型变量时,它将其设置为 0.41666666666。为什么它改变了值的精度,是否有一种解决方法来保持原始值的精度,即。将其设置为 0.416667。
问问题
1266 次
4 回答
2
TDateTime 是一个浮点数。有些数字不能完全表示为浮点数。0.416667 / 0.41666666666 似乎是另一个。
您可以四舍五入到 5 位或 6 位进行显示。这使您的准确度达到 1 秒左右。
于 2010-03-16T12:53:23.060 回答
2
每个计算机科学家都应该知道的关于浮点数的知识应该有所帮助,SO 自己的浮点精度也应该有所帮助- 这将为您提供一些与 Jeff 的答案相符的详细信息。
于 2010-03-16T13:15:58.860 回答
1
精度损失的原因之一是TDateTime是一个double,而Frac的参数和返回值是Extended类型。
将浮点数从一种类型转换为另一种类型时,可能会丢失一些精度。(对它们进行算术运算时也是如此)。
要正确比较浮点值,您应该使用单元 Math 中的 CompareValue 函数。
于 2010-03-16T13:47:00.260 回答
1
感谢您对此提供的所有帮助,非常感谢。为了解决由于精度变化而引起的问题,我使用了 CompareTime 函数而不是 >= 或 <= 运算符来比较时间。
于 2010-03-16T15:55:35.137 回答