📄 decstrround.txt
字号:
function DecStrRound(DecStr:String;Digit:integer;FillZero:boolean):string;//四舍五入函数
//本函数将数字格式的字符串四舍五入
//Digit:保留小数位数
//FillZero:少于保留位数则用0填充
var i,P,PotLt:integer;
DecError:boolean;
FrontStr,TailStr,TempStr:string;
Carry:Shortint;
begin
P:=0;
PotLt:=0;
DecError:=false;
if DecStr='.' then //如果以小数点为首的数字格式
DecStr:='0'
else begin
If DecStr[1]='.' then DecStr:='0'+DecStr;
end;
//先判断数字是否合法
for i:=1 to Length(DecStr) do begin
if DecStr[i]='.' then begin
P:=P+1;PotLt:=i;//记录小数点的个数和位置
end;
if ((DecStr[i]<'0') and (DecStr[i]<>'.')) or (DecStr[i]>'9') then begin
DecError:=true;Break; //判断有无非法字符
end;
end;
if P>1 then DecError:=true; //如果小数点超过1则数字非法
if DecError then begin
//showmessage('参数无效');
Result:='';
Exit; //输入数字非法
end;
if P=0 then begin//如果为纯整数,直接输出
Result:=DecStr;
if FillZero then begin //如果需要补0,则补足小数部分的空位为0
Result:=Result+'.';
for i:=1 to digit do begin
Result:=Result+'0';
end;
end;
Exit;
end;
//如果存在小数,分别就整数段和小数段分析
FrontStr:=Copy(DecStr,1,PotLt-1);
TailStr:=Copy(DecStr,PotLt+1,Length(DecStr)-PotLt);
//去掉小数部分后面的0字符
while copy(Tailstr,Length(Tailstr),1)='0' do begin
Tailstr:=Copy(Tailstr,1,Length(Tailstr)-1);
end;
//如果保留小数位数大于等于目前的小数位数
if Digit>=Length(TailStr) then begin
if FillZero then begin //如果需要补0,则补足小数部分的空位为0
for i:=1 to Digit-Length(TailStr) do begin
DecStr:=DecStr+'0'; //当保留位数大于,自动补0
end;
end;
Result:=DecStr;
Exit;
end;
TempStr:='';
Carry:=0;
if strtoint(TailStr[Digit+1])>=5 then Carry:=1;//进位
//先从小数开始分析,四舍五入
for i:=Digit Downto 1 do begin
p:=strtoint(TailStr[i])+Carry;
if p=10 then begin
if Fillzero then Tempstr:=Tempstr+'0';
Carry:=1;
end else begin
Tempstr:=Tempstr+inttostr(p);
if not Fillzero then begin
if Tempstr='0' then Tempstr:='';//不想填0时,如果返回结果等于0,则清空结果
end;
Carry:=0;
end;
end;
if Tempstr<>'' then Tempstr:=Tempstr+'.';
//小数部分分析完毕,开始分析整数部分
for i:=length(FrontStr) downto 1 do begin
p:=strtoint(FrontStr[i])+Carry;
if p=10 then begin
Tempstr:=Tempstr+'0';
Carry:=1;
end else begin
Tempstr:=Tempstr+Inttostr(p);
Carry:=0;
end;
end;
if Carry=1 then Tempstr:=Tempstr+'1';//到最后还存在进位,则进1
//处理所得到的结果字符串--倒置处理,得到最后的结果
Result:='';
for i:=Length(Tempstr) downto 1 do begin
Result:=Result+Tempstr[i];
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -