如题,大家帮忙了。要符合人民币大小写规则,如70305.3 ,大写为柒万零叁佰零伍元叁角整      谢谢!

解决方案 »

  1.   


    给你个例子把吧!
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Label1: TLabel;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function LowcasetoUpcase(xx:double):string;
    var
      i:Integer;
      j,dxhj:string;
      zero:boolean;
    begin
      j:=trim(inttostr(Round(xx*100)));
      if(pos('.',j))<>0 then j:=copy(j,1,pos('.',j)-1);
      if j='' then j:='0';
      if copy(j,length(j),1)='0' then
      begin
        dxhj:='整';
        zero:=true;
      end
      else
      begin
        dxhj:='';
        zero:=false;
      end;
      for i:=0 to length(j)-1 do
      begin
        if strtoint(copy(j,length(j)-i,1))<>0 then
          case i of
            0:dxhj:='分'+dxhj;
            1:dxhj:='角'+dxhj;
            2:dxhj:='元'+dxhj;
            3:dxhj:='拾'+dxhj;
            4:dxhj:='佰'+dxhj;
            5:dxhj:='仟'+dxhj;
            6:dxhj:='万'+dxhj;
            7:dxhj:='拾'+dxhj;
            8:dxhj:='佰'+dxhj;
            9:dxhj:='仟'+dxhj;
            10:dxhj:='亿'+dxhj;
            11:dxhj:='拾'+dxhj;
          end;
     //    if i=2 then dxhj:='元'+dxhj;
     //     if i=6 then dxhj:='万'+dxhj;
          case strtoint(copy(j,length(j)-i,1)) of
            0:begin
                if not zero then dxhj:='零'+dxhj;
                zero:=true;
              end;
            1:begin
                dxhj:='壹'+dxhj;
                zero:=false;
              end;
            2:begin
                dxhj:='贰'+dxhj;
                zero:=false;
              end;
            3:begin
                dxhj:='叁'+dxhj;
                zero:=false;
              end;
            4:begin
                dxhj:='肆'+dxhj;
                zero:=false;
              end;
            5:begin
                dxhj:='五'+dxhj;
                zero:=false;
              end;
            6:begin
                dxhj:='六'+dxhj;
                zero:=false;
              end;
            7:begin
                dxhj:='七'+dxhj;
                zero:=false;
              end;
            8:begin
                dxhj:='八'+dxhj;
                zero:=false;
              end;
            9:begin
                dxhj:='玖'+dxhj;
                zero:=false;
              end;
          end;
      end;
      if dxhj='整' then dxhj:='';
      result:=dxhj;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      label1.Caption := LowcasetoUpcase(StrtoFloat(Edit1.Text));
      ShowMessage(LowcasetoUpcase(StrtoFloat(Edit1.Text)));
    end;end.
      

  2.   

    转贴自超级猛料
    function NumberCn(mNumber: Real): WideString;constcPointCn: WideString = '点十百千万十百千亿十百千';cNumberCn: WideString = '零一二三四五六七八九';varI, L, P: Integer;S: string;beginResult := '';if mNumber = 0 then beginResult := cNumberCn[1];Exit;end;S := FloatToStr(mNumber);if Pos('.', S) <= 0 then S := S + '.';P := Pos('.', S);L := Length(S);for I := 1 to L doif P > I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1] + cPointCn[P - I]else if P = I then beginResult := StringReplace(Result, '零十零', '零', [rfReplaceAll]);Result := StringReplace(Result, '零百零', '零', [rfReplaceAll]);Result := StringReplace(Result, '零千零', '零', [rfReplaceAll]);Result := StringReplace(Result, '零十', '零', [rfReplaceAll]);Result := StringReplace(Result, '零百', '零', [rfReplaceAll]);Result := StringReplace(Result, '零千', '零', [rfReplaceAll]);Result := StringReplace(Result, '零万', '万', [rfReplaceAll]);Result := StringReplace(Result, '零亿', '亿', [rfReplaceAll]);Result := StringReplace(Result, '亿万', '亿', [rfReplaceAll]);Result := StringReplace(Result, '零点', '点', [rfReplaceAll]);end else if P < I thenResult := Result + cNumberCn[StrToInt(S[I]) + 1];if Result[Length(Result)] = cPointCn[1] thenResult := Copy(Result, 1, Length(Result) - 1);if Result[1] = cPointCn[1] then Result := cNumberCn[1] + Result;if (Length(Result) > 1) and (Result[2] = cPointCn[2]) and(Result[1] = cNumberCn[2]) thenDelete(Result, 1, 1);end; { NumberCn }function MoneyCn(mMoney: Real): WideString;varP: Integer;beginif mMoney = 0 then beginResult := '无';Exit;end;Result := NumberCn(Round(mMoney * 100) / 100);Result := StringReplace(Result, '一', '壹', [rfReplaceAll]);Result := StringReplace(Result, '二', '贰', [rfReplaceAll]);Result := StringReplace(Result, '三', '叁', [rfReplaceAll]);Result := StringReplace(Result, '四', '肆', [rfReplaceAll]);Result := StringReplace(Result, '五', '伍', [rfReplaceAll]);Result := StringReplace(Result, '六', '陆', [rfReplaceAll]);Result := StringReplace(Result, '七', '柒', [rfReplaceAll]);Result := StringReplace(Result, '八', '捌', [rfReplaceAll]);Result := StringReplace(Result, '九', '玖', [rfReplaceAll]);Result := StringReplace(Result, '九', '玖', [rfReplaceAll]);Result := StringReplace(Result, '十', '拾', [rfReplaceAll]);Result := StringReplace(Result, '百', '佰', [rfReplaceAll]);Result := StringReplace(Result, '千', '仟', [rfReplaceAll]);P := Pos('点', Result);if P > 0 then beginInsert('分', Result, P + 3);Insert('角', Result, P + 2);Result := StringReplace(Result, '点', '圆', [rfReplaceAll]);Result := StringReplace(Result, '角分', '角', [rfReplaceAll]);Result := StringReplace(Result, '零分', '', [rfReplaceAll]);Result := StringReplace(Result, '零角', '', [rfReplaceAll]);Result := StringReplace(Result, '分角', '', [rfReplaceAll]);if Copy(Result, 1, 2) = '零圆' thenResult := StringReplace(Result, '零圆', '', [rfReplaceAll]);end else Result := Result + '圆整';Result := '人民币' + Result;end; { MoneyCn }
     
      

  3.   

    给你个函数吧
    function Tjfdy.SmallTOBig(small:real):string;
    var
      SmallMonth,BigMonth:string;
      wei1,qianwei1:string[2];
      qianwei,dianweizhi,qian:integer;
    begin
    {------- 修改参数令值更精确 -------}
    {小数点后的位数,需要的话也可以改动该值}
      qianwei:=-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;      {判断大写位置,可以继续增大到real类型的最大值,可是谁有那么多钱}
          case qianwei of
            -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;
      

  4.   

    Function TFormFhdCw.XxToDx(const hjnum:real):String; 
    var Vstr,zzz,cc,cc1,Presult:string;xxbb:array[1..12]of string;uppna:array[0..9] of string;iCount,iZero,vPoint,vdtlno:integer;begin//*设置大写中文数字和相应单位数组*//xxbb[1]:='亿';xxbb[2]:='仟';xxbb[3]:='佰';xxbb[4]:='拾';xxbb[5]:='万';xxbb[6]:='仟';xxbb[7]:='佰';xxbb[8]:='拾';xxbb[9]:='元';xxbb[10]:='.';xxbb[11]:='角';xxbb[12]:='分';uppna[0]:='零';uppna[1]:='壹';uppna[2]:='贰';uppna[3]:='叁';uppna[4]:='肆';uppna[5]:='伍';uppna[6]:='陆';uppna[7]:='柒';uppna[8]:='捌';uppna[9]:='玖';Str(hjnum:12:2,Vstr);cc:='';cc1:='';zzz:='';result:='';presult:='';iZero:=0;vPoint:=0;for iCount:=1 to 10 dobegincc:=Vstr[iCount];if cc<>' ' thenbeginzzz:=xxbb[iCount];if cc='0' thenbeginif iZero<1 then //*对“零”进行判断*//cc:='零'elsecc:='';if iCount=5 then //*对万位“零”的处理*//if copy(result,length(result)-1,2)='零' thenresult:=copy(result,1,length(result)-2)+xxbb[iCount]+'零'elseresult:=result+xxbb[iCount];cc1:=cc;zzz:='';iZero:=iZero+1;endelsebeginif cc='.' thenbegincc:='';if (cc1='') or (cc1='零') thenbeginPresult:=copy(result,1,Length(result)-2);result:=Presult;iZero:=15;end;if iZero>=1 thenzzz:=xxbb[9]elsezzz:='';vPoint:=1;endelsebeginiZero:=0;cc:=uppna[StrToInt(cc)];endend;result:=result+(cc+zzz)end;end;If Vstr[11]='0' then //*对小数点后两位进行处理*//beginif Vstr[12]<>'0' thenbegincc:='零';result:=result+cc;cc:=uppna[StrToInt(Vstr[12])];result:=result+(uppna[0]+cc+xxbb[12]);endendelsebeginif iZero=15 thenbegincc:='零';result:=result+cc;end;cc:=uppna[StrToInt(Vstr[11])];result:=result+(cc+xxbb[11]);if Vstr[12]<>'0' thenbegincc:=uppna[StrToInt(Vstr[12])];result:=result+(cc+xxbb[12]);end;end;result:=result+'正';end;
      

  5.   

    给你一段很短的代码吧,好用,我用过的
    function TForm1.xTOd(i:Real):string; 
    const 
      d='零壹贰叁肆伍陆柒捌玖分角元拾佰仟万拾佰仟亿'; 
    var 
      m,k:string; 
      j:integer; 
    begin 
      k:=''; 
      m:=floattostr(int(i*100)); 
      for j:=length(m) downto 1 do 
        k:=k+d[(strtoint(m[Length(m)-j+1])+1)*2-1]+ 
          d[(strtoint(m[Length(m)-j+1])+1)*2]+d[(10+j)*2-1]+d[(10+j)*2]; 
      xTOd:=k; 
    end; 调用: 
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      Sum:real; 
    begin 
      sum:=12.34; 
      showmessage('人民币大写:'+xTOd(Sum)); 
    end; 
      

  6.   

    function SmallTOBig(small:real):string;
    var SmallMonth,BigMonth:string;
    wei1,qianwei1:string[2];
    wei,qianwei,dianweizhi,qian:integer;
    begin
    {------- 修改参数令值更精确 -------}
    {小数点后的位置,需要的话也可以改动-2值}
    qianwei:=-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;
    {判断大写位置,可以继续增大到real类型的最大值}
    case qianwei of
    -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;
      

  7.   

    http://expert.csdn.net/Expert/topic/1834/1834637.xml?temp=.9615442http://www.csdn.net/Develop/Read_Article.asp?Id=6560
      

  8.   

    如果你觉得楼上回答得还不够, 或者想直接用控件, 还可以上playicq去下载!
      

  9.   

    谢谢 ,大家帮忙,我测试过了,hlddg(hlddg) 和qxj(小小小小小小程序员) 的是正确的,符合人民币大写规则,别的还有些问题,总之谢谢大家帮忙了。马上解贴。