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