再看看Delphi中的这个函数是怎么写的
function HoursBetween(const ANow, AThen: TDateTime): Int64;
begin
Result := Trunc(HourSpan(ANow, AThen));
end;
function HourSpan(const ANow, AThen: TDateTime): Double;
begin
Result := HoursPerDay * SpanOfNowAndThen(ANow, AThen);
end;
function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;
begin
if ANow < AThen then
Result := AThen - ANow
else
Result := ANow - AThen;
end;
两个浮点数相减,然后乘以24,取整
问题就出在取整上了,浮点运算本来就有误差,直接取整肯定就有问题了
这里应该判断一个范围,而不是简单的取整
就是说如果0.9999可以认为是1,但是0.98就要认为是0了 |