一个四舍五入的函数

王朝delphi·作者佚名  2006-01-09
宽屏版  字体: |||超大  

这是一个四舍五入的函数,具体用法myround(1.999,2) = 2.00 第一位1.999为要四舍五入的数,2为要取的小数位。

欢迎大家测试探讨。QQ:81392790

function myround(const yuan: Extended; const pp: Integer): Extended;

//yuan:原浮点数,PP保留 小数点后第几位

var

p,l,m,l2:Longint;

s:string; // 原浮点数

sq:string; // 小数点前

sh:string;//小数点后

begin

if yuan=0 then exit;// 原浮点数 0

if pp<0 then exit; //非法小数点后第几位

s:=floattostr(yuan);

p:=pos('.',s); //小数点位置

sq:=midstr(s,1,p-1);

sh:=midstr(s,p+1,length(s)-length(sq)-1);

l:=length(sh);//小数位数

l2:=length(sq);//整数位数

if pp>=l then

begin//0

result:=strtofloat(s);

exit;//比如 11。06 要保留到 小数点后第3位显然 不合理

end;//

{ if pp=l then //比如 11。06 要保留到 小数点后第2位不用处理 直接返回

begin//1

Result:=s;

exit;

end;//1 }

if pp<l then //比如 11。06 要保留到 小数点后第1位 ,。。。

begin//2

m:=strtoint(sh[pp+1]);

if m>=5 then

begin

if pp>=1 then //保留到 小数点后第1,2。。。位

begin//3

sh:=midstr(sh,1,pp);

sh := inttostr(strtoint(sh)+1);

if length(sh)>pp then

begin

sh:= midstr(sh,2,pp);

sq:= inttostr(strtoint(sq)+1);

end;

Result:=strtofloat(sq+'.'+sh);

exit;

end//3

else //保留到 小数点后第0位

begin//4

sq[l2]:=chr(ord(sq[l2])+1);

Result:=strtofloat(sq);

exit;

end;//4

end

else

begin

if pp>=1 then //保留到 小数点后第1,2。。。位

begin//3

sh:=midstr(sh,1,pp);

Result:=strtofloat(sq+'.'+sh);

exit;

end//3

else //保留到 小数点后第0位

begin//4

Result:=strtofloat(sq);

exit;

end;//4

end;

end;//2

end;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有