摘录的
小写金额转换  如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它几乎可以无限制的转换,只要你能读得出来和写得进去: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{循环小写货币的每一位,从小写的右边位置到左边}beginif qian<>dianweizhi then{如果读到的不是小数点就继续}begincase 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);"他自动默认小数点后两位

解决方案 »

  1.   

    function  TForm1.My_StrToRMB(curs: string) :string ;
    var
      daxie,danwei,minuscurs:string;
      i,j,deccount :integer ;
      rmb :int64;
    begin
      curs:=trim(curs);
      if (curs='-') or (curs='.') or (curs='') then  // '.','-',''错
      begin
        result:='ERROR';
        exit;
      end;
      deccount :=0;
      for i:=1 to length(curs) do
      begin
        if  not (curs[i]  in ['0'..'9','.','-']) then     //'123w2'错
        begin
          result:='ERROR';
          exit;
        end;
        if (curs[i]='.') and (deccount>0) then  //'12313.324.23'错
        begin
          result:='ERROR';
          exit;
        end;
        if (curs[i]='-') and (i>1) then        //'-123-123'错
        begin
          result:='ERROR';
          exit;
        end;
        if curs[i]='.' then  inc(deccount);
      end;
      rmb:=round(StrToFloat(curs)*100);
      minuscurs:='';  //负数标志
      if rmb<0 then
      begin
        minuscurs:='(负数)' ;
        rmb:=(-1)*rmb;
      end;
      if rmb>=1E18 then     //超过9千万亿
      begin
        result:='ERROR';
        exit;
      end;
      curs:='';
      i:=0; j:=0 ;
      while rmb>0 do
      begin
        j:= rmb mod 10;
        case j of
          0 : daxie :='零' ;
          1 : daxie :='壹' ;
          2 : daxie :='贰' ;
          3 : daxie :='叁' ;
          4 : daxie :='肆' ;
          5 : daxie :='伍' ;
          6 : daxie :='陆' ;
          7 : daxie :='柒' ;
          8 : daxie :='捌' ;
          9 : daxie :='玖' ;
        end;
        case i of
          0 : danwei :='分' ;
          1 : danwei :='角' ;
          2 : danwei :='圆' ;
          3 : danwei :='拾' ;
          4 : danwei :='佰' ;
          5 : danwei :='仟' ;
          6 : danwei :='万' ;
          7 : danwei :='拾' ;
          8 : danwei :='佰' ;
          9 : danwei :='仟' ;
          10 : danwei :='亿' ;
          11 : danwei :='拾' ;
          12 : danwei :='佰' ;
          13 : danwei :='仟' ;
          14 : danwei :='万' ;
          15 : danwei :='拾' ;
          16 : danwei :='佰' ;
          17 : danwei :='仟' ;
        end;
        rmb:=rmb div 10;
        if j<>0 then curs:=daxie+danwei+curs;      //该位上不为0
        if (j=0) and (not (i in [2,6,10,14])) then //该位为0,是一般位
            curs:=daxie+curs;
        if (j=0) and  (i in [2,6,10,14]) then      //该位为0,是敏感位
            curs:=danwei+curs;
        inc(i);
      end;
      while pos('零零',curs)>0  do  curs:=stringreplace(curs,'零零','零',[]);
      curs:=stringreplace(curs,'零圆','圆',[]);
      while pos('零万',curs)>0  do curs:=stringreplace(curs,'零万','万',[]); //上万亿后可能两个'零万'
      curs:=stringreplace(curs,'零亿','亿',[]);
      curs:=stringreplace(curs,'角零','角',[]);
      if copy(curs,length(curs)-3,4)='圆零' then  //最后两位是圆零.
          curs:=stringreplace(curs,'圆零','圆整',[]);  //小数点后
      curs:=stringreplace(curs,'亿万','亿',[]);
      if curs='' then curs:='零圆整';
      result:=minuscurs+curs;
    end;
      

  2.   

    function upcase(lchar:char):CHAR;  //大写函数
    BEGIN
      result:= chr(ord(lchar)-32);
    end