读书人

Delphi7的一个诡异的错误

发布时间: 2013-01-23 10:44:49 作者: rapoo

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

读书人网 >.NET

热点推荐