今天用delphi发现一个问题,我用Format('%.4f',[i])对数据进行操作,发现有时候并不是四舍五入的,我测试了一下,如果用i:=1.98775得到的结果是1.9877,而如果i:=1.98875得到的结果是1.9878.同样测试了几个数字,小数点后面第二位的奇偶数不同也会对结果产生影响,请问这是什么原因?

解决方案 »

  1.   

    奇进偶不进的原则,比如你说的1.987,被进位是奇数,所以不会入
    而1.988,被进位是偶数,所以入了要用常规的四舍五入,先引用Math单元,使用SimpleRoundTo函数
      

  2.   

    最有效的解决办法:
    function ARoundN(v: Double; n: Integer): Double;
    var
      I:Integer;
    begin
      result:=v;
      for I:=0 to n-1 do
        begin
          result:=result*10;
        end;
      result:=Round(result);
      for I:=0 to n-1 do
        begin
          result:=result/10;
        end;
    end;
      

  3.   

    将i的类型改为
    i: Extended;
      

  4.   

    delphi的四舍五入采用的是银行家算法,当需要进位的是5时,上位为偶数则不进,为奇数则进位。如果科学四舍五入法,则需要自己做程序。