为什么两个一样的双精度数值比较的时候Delphi认为不相等??? ( 积分: 200 )

  • 主题发起人 主题发起人 hapland
  • 开始时间 开始时间
H

hapland

Unregistered / Unconfirmed
GUEST, unregistred user!
我用Delphi 7.0 + Windows 2000
在程序里面需要比较三个数据的大小:
if (DecAssumePos > FreeXDn) then
begin
DecAssumePos := FreeXDn;
end
else if (DecAssumePos < FreeXUp) then
begin
DecAssumePos := FreeXUp;
end;
在Watch里面看到三个变量的数值都是一样的17.672(程序运行到这里三个数值也的确是一样的),
但是偏偏下面的那个分支被执行了,而且我用监视也发现程序认为这三个值都不相等。
我觉得无法理解啊。
各位大侠有没有知道什么原因的,小弟跪谢了。
 
我用Delphi 7.0 + Windows 2000
在程序里面需要比较三个数据的大小:
if (DecAssumePos > FreeXDn) then
begin
DecAssumePos := FreeXDn;
end
else if (DecAssumePos < FreeXUp) then
begin
DecAssumePos := FreeXUp;
end;
在Watch里面看到三个变量的数值都是一样的17.672(程序运行到这里三个数值也的确是一样的),
但是偏偏下面的那个分支被执行了,而且我用监视也发现程序认为这三个值都不相等。
我觉得无法理解啊。
各位大侠有没有知道什么原因的,小弟跪谢了。
 
浮点数的计算机表示与人理解的十进制是不一样的,所以比较大小时,常常不能用&quot;=&quot;来比较相等.但可以用Math单元中的SameValue函数来代替的.
 
很感谢您给的提示,我试了, 基本解决了这样的问题。
并且还找到了相关函数CompareValue
感谢,谢谢。
 
后退
顶部