程序代码如下:procedure TForm1.Button3Click(Sender: TObject);
var
  cp1,cp2:double;
  r1,r2:double;
begin
  r1:=293.00;
  r2:=8056.72;  cp1:=r1+r2; //293.00+8056.72=8349.72
  cp2:=8349.72;  if cp1<>cp2 then
  begin
    showmessage('cp1<>cp2');
    showmessage('cp1='+FormatFloat('#0.00',cp1)+'====== cp2='+FormatFloat('#0.00',cp2));
  end
  else
  begin
    showmessage('cp1=cp2');
    showmessage('cp1='+FormatFloat('#0.00',cp1)+'====== cp2='+FormatFloat('#0.00',cp2));
  end;
运行后的结果是cp1<>cp2,不知道是什么原因,是DELPHI的浮点数计算问题吗?
这样的话,对两个浮点数进行比较只能是将他们格式化为字符串后再进行比较了?还有更好的方法吗?
请高手解答。
谢谢。

解决方案 »

  1.   

    http://blog.csdn.net/jinjazz/archive/2008/06/18/2561406.aspx
      

  2.   

    应该使用if ABS(cp1-cp2)<=0.0000001 then
      

  3.   

    uses Math;if RoundTo(Value1 - Value2, -2) = 0 then
    //相等
      

  4.   

    将上面的改为if cp1>cp2 then
    通过运行,得出该条件也成立。
    那这种判断又怎么处理呢?
    我看只有转换成字符串比不会出问题。
    各位高手 ,还有好的解决办法吗?
      

  5.   

    if abs(cp1-cp2)<0.0001 then
      

  6.   

    主要是8056.72<8192,8349.72>8192所以会不相等。
      

  7.   

    是啊,浮点是比较特殊。有时候0.511和.511是不相同的
    我也遇到过。不过我当时不知道用什么。我用FloatToStr转化为字符串比较的。
    好像可以哦。^_^