本帖最后由 shao113112 于 2010-09-02 09:50:43 编辑

解决方案 »

  1.   

    應該是條件代碼問題,你設置一個斷點,把每一步的結果show出來看一下結果
      

  2.   

    double的类型的存储比较特殊,你可以查看相关资料,虽然你给的是0.02的值,但是内存中可能是0.019999999999999
      

  3.   


    这点我了解,但是为什么通过str和float的2次转换就不出现这个问题了哈?
      

  4.   

    FieldByName(x[0]).AsCurrency -FieldByName(x[1]).AsCurrency
      

  5.   

    如果是货币的还是用这个AsCurrency这个比较好把,我比较喜欢用value这个。
      

  6.   

    谢谢楼上几位了。
    其实我需要解释 strtofloat(Floattostr(cal)) 这个
      

  7.   

    Floattostr(cal)根据本地设置(通常是小数点8位),已经做了精度调整。
    然后再 StrToFloat 得到的值,自然跟 cal 有所区别。
    还有,real 我记得没错的话,就是 single 吧。
    single 是8位有效(含小数点前面的位数),8位之外的,就是随便什么数字都有可能。
    可以用 Double 试试看,这个直接玩 16 位,相对来说准确多了。