function WillShow(AVal: Double): Boolean;
var
  f: Double;
const
  ZommRate = 1000;
begin
  //f := 1000 * AVal;
  //Result := 2800 = Trunc(f);
  Result := 2800 = Trunc(ZoomRate * AVal);
end;procedure TForm1.btn1Click(Sender: TObject);
var
  f: Double;
begin
  f := 2.8;
  if WillShow(f) then
    ShowMessage('Yeah!')
  else
    ShowMessage('No!');
end;end.返回的结果是No,
但是使用屏蔽的部分才会提示 Yeah!
是不是这种编译器函数不支持表达式造成的?

解决方案 »

  1.   

    我用的是 DelphiXE 表示.都是 Yeah
    另外楼主 你ZommRate  与 ZoomRate  是不是弄错了??
      

  2.   

    浮点数运算的时候会出现精度问题,从这里的值应该就不对了ZoomRate * AVal
    记得我以前解决过,帮你查一下
      

  3.   

    刚找了一下,LZ把double改为numeric/decimal看看
      

  4.   

    抱歉,搞错了,刚才那个是sql解决方案,晕死,身边没环境试不了,唉,我再找找看
      

  5.   

    从你的回答,我觉得是版本的处理问题吧。ZoomRate都是一样的。
    比较浮点数完全可以参考Dateutils里面的SameTime,精度为-7.
    以后遇到编译器的参数,我一定会用局部变量传入,而不是直接写一个表达式。谢谢两位的回答。
      

  6.   

    我用的是Delphi7,在XP/2008/2003/win7中都不行。试验过的。
      

  7.   

    function WillShow(AVal:  Currency): Boolean;
      

  8.   

    用round函数代替trunc函数,不可能不行,我已经试过了
    trunc是舍去,而round才是四舍五入