程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 一個四捨五入的函數

一個四捨五入的函數

編輯:Delphi

  這是一個四捨五入的函數,具體用法 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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved