function Check_A181(var Value1,Value2:Double):Boolean;
  var
    v11,v17,v18:Double;
  begin
    with TaxDM.TaxTable_A do
    begin
      Locate('xmdm',11,[loPartialKey]);
      v11:=FieldByName('ybbys').AsFloat;
      Locate('xmdm',17,[loPartialKey]);
      v17:=FieldByName('ybbys').AsFloat;
      Locate('xmdm',18,[loPartialKey]);
      v18:=FieldByName('ybbys').AsFloat;      Value1:=v18;
      Value2:=v11-v17;      if Value1=Value2 then
        result:=true
      else
        result:=false;
    end;
  end;我用上面的代码检查Value1和Value2的值是否相等,计算完成后Value1=335379.42 Value2=335379.42,但是“ if Value1=Value2 ”却判断这两个值不等,我实在是不明白为什么。我用的数据库是access2000,ybbys是双精度型,小数位为2

解决方案 »

  1.   

    在这里的确是不能够正确比较数据相等的,对于double类型数据。这里取出的数据实际上有一点点出入,我以前也出现过这样的问题。
      

  2.   

    if Value1=Value2 then
            result:=true
          else
            result:=false;
    改为
    if abs(Value1-Value2)<0.00001 then
      Result:=True
    else
      Result:=False
      

  3.   

    const
      nMin = 1E-6;
    if abs(Value1 - Value2) < nMin then
      Result := True
    else
      Result := False浮點數不能精確表示,所以存在很小的誤差。
      

  4.   

    找到解决方法了 
    Value1:=roundto(value1,-2);
     Value2:=roundto(value2,-2);