delphi+ACCESS 四舍五入的问题
我用的模式是delphi+ACCESS ,如何实现四舍五入的问题,比如:-1.245=-1.25;34.567=34.57
[解决办法]
x:=1.245;
if x>0 then x:=x+0.005;
if x<0 then x:=x-0.005;
x:=FormatFloat('#.00',X);
[解决办法]
上面代码有误:
- Delphi(Pascal) code
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舍5入,x是你的数据
StrToFloat(Format('%0.2',[x+0.0000001]));
[解决办法]
可以参考一下我写的四舍五入的函数
- Delphi(Pascal) code
//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;