首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

Delphi7的一个诡异的错误

2013-01-23 
Delphi7的一个诡异的异常从中可以看出,没有异常的值,但计算确实异常的。而且还有一个诡异的地方:这个函数只

Delphi7的一个诡异的异常

从中可以看出,没有异常的值,但计算确实异常的。

而且还有一个诡异的地方:这个函数只在另一个函数中调用时出错,如果放在其他的函数中调用,哪怕是所有的输入参数都相同,还是会异常。郁闷之极!!!
郁闷之极后,将代码该为如下,就更加郁闷了:

procedure TImageDrawer.WrdToScr(dx,dy,dz:Double;var iX,iY:Integer);
var
  dTmp:Double;
begin
  iX:=-1;iY:=-1;
  if FProject = nil then exit;
  if (FProject.FPrjParam.XMax = FProject.FPrjParam.XMin) then exit;
  Try
    dTmp:=FProject.FPrjParam.XMax;
    dZ:= FProject.FPrjParam.XMin;
    dZ:=dTmp - dZ;
    dz:= (dx-FProject.FPrjParam.XMin)/dZ;
    if dZ = 0 then
      iX:=0
    else
    begin
      dZ:=FImage.ClientWidth * dZ;
      iX:=Floor(dZ);
    end;

  Except
   on E:Exception do
     Raise Exception.Create('xMax:'+FLoatToStr(FProject.FPrjParam.XMax)
                           +#13#10+'xMin:'+FLoatToSTr(FProject.FPrjParam.Xmin)
                           +#13#10+'dx:'+FloatToSTr(dx)
                           +#13#10+'ImgWidth:'+IntToSTr(FImage.ClientWidth));
  end;
end;
郁闷的原因,异常居然发生在dTmp:=FProject.FPrjParam.XMax这一句?实在搞不懂,简单的赋值语句为什么发生异常???? delphi exception 诡异
[解决办法]
浮点是没有精确相等的,


 if (FProject.FPrjParam.XMax = FProject.FPrjParam.XMin) then
应该改为
 if 0.000001>abs(FProject.FPrjParam.XMax - FProject.FPrjParam.XMin) then

热点排行