Extended和Double的奇怪问题

2014-08-20 Xie Jingyi 更多博文 » 博客 » GitHub »

Delphi Float Number

原文链接 https://hsfzxjy.github.io/2014-08-20-strange-extended-and-double-problem/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。


最近在做一个项目,其中有一段判断一个Extended浮点数是否为整数的代码。我用如下方式实现:

function IsInt(F: Extended): Boolean;
begin
  result := Trunc(F)-F = 0; //整数部分等于自身
end;

测试了许多样例都过了,唯独这个没过:

IsInt(4.000000002*1000000000); //False

调试时发现: Trunc(F)居然等于4000000001!开始以为是精度的问题,找了许多资料也没能解决。后来将Extended换成了Double,就通过了。百思不得其解中。