我用的模式是delphi+ACCESS ,如何实现四舍五入的问题,比如:-1.245=-1.25;34.567=34.57

解决方案 »

  1.   

    很简单啊,delphi就支持啊,不过delphi是银行家算法。你可以自己更改一下
      

  2.   


    x:=1.245;
    if x>0 then x:=x+0.005;
    if x<0 then x:=x-0.005;
    x:=FormatFloat('#.00',X);
      

  3.   

    上面代码有误:x:=1.245;
    if x>0 then x:=x+0.005;
    if x<0 then x:=x-0.005;
    x:=strtofloat(FormatFloat('#.00',X));
      

  4.   

    自己写一个四舍五入的算法吧。
    以前也遇到过delphi中四舍五入的问题
    把我自己写的一个算法发给你参考
      

  5.   

    加个误差4舍5入,x是你的数据StrToFloat(Format('%0.2',[x+0.0000001]));
      

  6.   

    可以参考一下我写的四舍五入的函数//number:要处理的数字
    //precision:精确度
    //dealtype:处理方式   0:四舍五入     1:进位     2:去位function DealPrecision(number:real;precision:integer;dealtype:integer):real;
    var
      tmpNumber:real;
      tmpPrecision:integer;
    begin
      if Abs(number)<0.0001 then
      begin
        Result:=0;
        Exit;
      end;
      if precision>=0 then
      begin
        Result:=DealPrecisionZ(number,precision,dealtype);
        exit;
      end
      else
      begin
        tmpPrecision:=abs(precision);
        tmpNumber:=number/power(10,tmpPrecision);
        tmpNumber:=DealPrecisionZ(tmpNumber,1,dealtype);
        tmpNumber:=tmpNumber*power(10,tmpPrecision);
        Result:=tmpNumber;
      end;
    end;function DealPrecisionZ(number:real;precision:integer;dealtype:integer):real;
    var
      s:string;
      i:integer;
      tmp:string;
      strNumber:string;
      intLength,intIntCount,intPointPos,intFloatCount:integer;
      intZFFlag:Integer;
    begin
      if Abs(number)<0.0001 then
      begin
        Result:=0;
        Exit;
      end;
      if number<0 then
      begin
        intZFFlag:=-1;
      end
      else
      begin
        intZFFlag:=1;
      end;
      number:=intZFFlag*number;
      strNumber:=floattostr(number);
      if copy(strNumber,1,15)='0.0999999999999' then
      begin
        strNumber:='0.1';
      end;  if pos('.',strNumber)>0 then
      begin
        if pos('0000000000',strNumber)>pos('.',strNumber) then
        begin
          strNumber:=copy(strNumber,1,(pos('0000000000',strNumber)-1));
        end;
      end;  intPointPos:=Pos('.',strNumber);
      if intPointPos=0 then
      begin
        number:=intZFFlag*number;
        result:=number;
        exit;
      end;
      intLength:=length(strnumber);
      intIntCount:=intPointPos-1;
      intFloatCount:=intLength-intPointPos;
      s:='0.';
      for i:=1 to (precision+1) do
      begin
        s:=s+'0';
      end;
      case dealtype of
        0 :
        begin
          number:=StrToFloat(copy(FloatToStr(number),1,intPointPos+(Length(s)-2)));
          tmp:=FormatFloat(s,(number+(5/(power(10,precision+1)))));
          number:=strtofloat(copy(tmp,0,length(tmp)-1));
        end;
        1 :
        begin
          s:='0.';
          for i:=1 to (precision-1) do
          begin
            s:=s+'0';
          end;
          s:=s+'1';
          if precision<intFloatCount then
          begin
            number:=strtofloat(copy(strnumber,0,intIntCount+1+precision))+strtofloat(s);
          end;
        end;
        2 :
        begin
          number:=strtofloat(copy(strnumber,0,intIntCount+1+precision));
        end;
      end;
      number:=intZFFlag*number;
      result:=number;
    end;