发信人: owalmh() 
整理人: (2000-12-06 19:08:23), 站内信件
 | 
 
 
【 在 wangyong (大熊) 的大作中提到: 】
 : 请教将数字转换成汉字大写金额表示的算法
 : 急,
 
 将12345678.99转换成12,345,678.99 
     方法:
        var
                    n : DOUBLE ;
               begin
                       n:=12345678.99;
                       ShowMessage(Format('%*.*n',[10,2,n]));
               end;
 
  
 小写金额转换 
 
   如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧, 居然利用了位置来转换),但是它几乎可以无限制的转换,只要你能读得出来和 写得进去:
 function Tform1.SmallTOBig(small:real):string;
 var SmallMonth,BigMonth:string;
 wei1,qianwei1:string[2];
 wei,qianwei,dianweizhi,qian:integer;
 begin
 {------- 修改参数令值更精确 -------}
 qianwei:=-2;{小数点后的位置,需要的话也可以改动-2值}
 Smallmonth:=formatfloat('0.00',small);{转换成货币形式,需要的话小数点后 加多几个零}
 {---------------------------------}
 dianweizhi :=pos('.',Smallmonth);{小数点的位置}
 for qian:=length(Smallmonth) downto 1 do{循环小写货币的每一位,从小写的 右边位置到左边}
 begin
 if qian<>dianweizhi then{如果读到的不是小数点就继续}
 begin
 case strtoint(copy(Smallmonth,qian,1)) of{位置上的数转换成大写}
 1:wei1:='壹'; 2:wei1:='贰';
 3:wei1:='叁'; 4:wei1:='肆';
 5:wei1:='伍'; 6:wei1:='陆';
 7:wei1:='柒'; 8:wei1:='捌';
 9:wei1:='玖'; 0:wei1:='零';
 end;
 case qianwei of{判断大写位置,可以继续增大到real类型的最大值}
 -3:qianwei1:='厘';
 -2:qianwei1:='分';
 -1:qianwei1:='角';
 0 :qianwei1:='元';
 1 :qianwei1:='拾';
 2 :qianwei1:='佰';
 3 :qianwei1:='千';
 4 :qianwei1:='万';
 5 :qianwei1:='拾';
 6 :qianwei1:='佰';
 7 :qianwei1:='千';
 8 :qianwei1:='亿';
 9 :qianwei1:='十';
 10:qianwei1:='佰';
 11:qianwei1:='千';
 end;
 inc(qianwei);
 BigMonth :=wei1+qianwei1+BigMonth;{组合成大写金额}
 end;
 end;
 SmallTOBig:=BigMonth;
 end;
 调用如下“edit1.text:=SmallTOBig(1234567890.1234);”他自动默认小数点后 两位
 
  
 替换指定串函数 
 
 一个替换指定串的函数,从一个字符串中找出指定子串,并替换为另一子串。
 function replacing(S,source,target:string):string;
 var site,StrLen:integer;
 begin
 {source在S中出现的位置}
 site:=pos(source,s);
 {source的长度}
 StrLen:=length(source);
 {删除source字符串}
 delete(s,site,StrLen);
 {插入target字符串到S中}
 insert(target,s,site);
 {返回新串}
 replacing:=s;
 end;
 
 
 
  
 
 
  -- ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 61.140.248.145]
  | 
 
 
 |