WEB开发网
开发学院软件开发Delphi 一个四舍五入的函数 阅读

一个四舍五入的函数

 2006-02-04 13:45:12 来源:WEB开发网   
核心提示:这是一个四舍五入的函数,具体用法myround(1.999,2) = 2.00 第一位1.999为要四舍五入的数,一个四舍五入的函数,2为要取的小数位,欢迎大家测试探讨,2,,QQ:81392790function myround(const yuan: Extended; const pp: Integer): Ex

这是一个四舍五入的函数,具体用法 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;

Tags:一个 四舍五入 函数

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接