我用:dataset.FieldByName('pay').AsString := formatfloat('0.00',dataset.FieldByName('weight').asfloat * dataset.FieldByName('price').asfloat);得出结果是:1.90*0.55=1.045 保留两位后是1.05 (应该是正确的)
但 4650.00*0.7221 =3357.765  保留两位后怎么是3357.66
为何两个四舍五入结果不一样

解决方案 »

  1.   

    用format函数吧
    format('%10.2f',[dataset.FieldByName('weight').asfloat * dataset.FieldByName('price').asfloat])
      

  2.   

    // 没错呀   ShowMessage(Format('%10.2f',[3357.765])) ; //3357.77 
      

  3.   

    工程规则:
    1.44 -> 1.4  // 四舍
    1.46 -> 1.5  // 六入
    1.45 -> 1.4  // 五看尾数(5后为0不入,5后不为0则进位)
    1.451 -> 1.5抄来的  :-P
      

  4.   

    不好意思,我记错了,下面是网上的东西:这种算法是这样的:1.25留一位则1.2=round(1.25) 
        如果是1.35则1.4=round(1.35) 
        奇进偶不进。这样在一大串需要四舍五入的数相加相减相乘时误差小一点。eg:1.25+1.35+1.45+1.55+1.15+1.65=8.4=round(1.25)+round(1.35)+round(…… 
      

  5.   

    edit1.Text:=formatfloat('00.00',4650.00*0.7221);
    结果为
      edit1.text:=3357.77
    没有错呀
      

  6.   

    Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的。这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 5.5、6.5) 实施Round函数时,处理器根据小数点前数字的奇、偶性来确定舍入与否,如 5.5 Round 结果为 6,而 6.5 Round 结果也为6, 因为 6 是偶数。
      

  7.   

    这样
    format('%10.2f',[strtocurr(format(‘%10.2f",[dataset.FieldByName('weight').asfloat]) * strtocurr(format('%10.2f.,[dataset.FieldByName('price').asfloat])])