怎么把数字转换成大写?
比如: 123    壹贰叁

解决方案 »

  1.   

    以前有过了
    http://dev.csdn.net/article/28/28433.shtm
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      str, str_Upper:string;
      i,j:integer;
    begin
      str_Upper := '';
      str := Edit1.Text;
      for j := 1 to Length(Edit1.Text) do
      begin
        i := StrToInt(LeftStr(str,1));
        case i of
        0: str_Upper := str_Upper + '零';
        1: str_Upper := str_Upper + '壹';
        2: str_Upper := str_Upper + '贰';
        3: str_Upper := str_Upper + '叁';
        4: str_Upper := str_Upper + '肆';
        5: str_Upper := str_Upper + '伍';
        6: str_Upper := str_Upper + '陆';
        7: str_Upper := str_Upper + '柒';
        8: str_Upper := str_Upper + '捌';
        9: str_Upper := str_Upper + '玖';
        end;
        Delete(str,1,1)
      end;
    Edit2.Text := str_Upper;
    end;
      

  3.   

    你的代码用行时出错啊
    错误提示:
    Undeclared identifier:'Leftstr'
      

  4.   

    http://community.csdn.net/Expert/topic/3224/3224287.xml?temp=4.572695E-02
    这里面你稍微改改就可以了。。比转换金额的要简单
      

  5.   


    错误提示:
    Undeclared identifier:'Leftstr'Users strUtils
      

  6.   

    function NumToChar(const n: Real): string;   //可以到万亿,并且可以随便扩大范围
    const cnum:  array[0..9]  of string = (’零’,’壹’,’贰’,’叁’,’肆’,’伍’,’陆’,’柒’,’捌’,’玖’);
          cunit: array[0..14] of string =  (’万’,’仟’,’佰’,’拾’,’亿’,’仟’,’佰’,’拾’,’万’,’仟’,’佰’,’拾’,’元’,’角’,’分’);
    var
      i : Integer;
      snum,stemp : string;
    begin
      result := ’’;
      snum := format(’%15d’,[round(n * 100)]);
      for i := 0 to 14 do
      begin
        stemp := copy(snum,i+1,1);
        if stemp=’ ’ then continue
        else result := result + cnum[strtoint(stemp)] + cunit[i];
      end;
      //去掉多余的零
      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]); 
      if pos(’零分’,result)=0 then Result := StringReplace(Result, ’零角’, ’零’, [rfReplaceAll])
      else Result := StringReplace(Result, ’零角’, ’整’, [rfReplaceAll]);
      Result := StringReplace(Result, ’零分’, ’’, [rfReplaceAll]);
    end;
      

  7.   

    错误提示:
    Undeclared identifier:'Leftstr'----------------------------------------------------不用什么都面面俱到吧...你在uses后面加上StrUtils
      

  8.   

    给个人民币转换程序给你,慢慢看,肯定可以的
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      procedure StrCopyEx(Des:Pchar;Src:ShortString;StartPos:integer;Len:integer);
      function GetFirstNoZeroLen(s:ShortString;StartPos:integer):integer;
      function FloatToPStr(F:Double;Num:Integer):ShortString;
      function ConvertRMB(RMB:double):ShortString;
    implementation{$R *.dfm}
    procedure StrCopyEx(Des:Pchar;Src:ShortString;StartPos:integer;Len:integer);
    var
     i:integer;
    begin
      for i:=0 to Len-1 do
      begin
        Des[i]:=Src[StartPos+i+1];
      end;
      Des[Len]:=#0;
    end;
    {**************************************************************************
                      获取指定位置到第一个非零字符的长度
                  输入:
                         s---所在字符串
                         StartPos---开始的位置
                  返回:从s[i]到第一个不是'0'的长度
                  说明:由DecStrToPst调用              
    **************************************************************************}
    function GetFirstNoZeroLen(s:ShortString;StartPos:integer):integer;
    var
     i,L:integer;
    begin
      L:=strlen(Pchar(String(s)));
      Result:=0;
      for i:=StartPos to L do
      begin
        if s[i]<>'0' then begin Result:=i-StartPos; exit;end;
      end;
    end;
    //------------------------------------------------------------------------------
    function DecStrToPStr(DecString:ShortString):ShortString;
    const
      HZStr:array[0..10] of String[2]=(('零'),('壹'),('贰'),('叁'),('肆'),('伍'),('陆'),
                                      ('柒'),('捌'),('玖'),('拾'));  sUnitB:Array[1..14] Of String[4]=((''),('拾'),('佰'),('仟'),('万'),('十万'),('百万'),
                                      ('千万'),('亿'),('十亿'),('百亿'),('千亿'),('兆'),
                                      ('十兆') );
      sUnit:Array[1..4] Of String[2]=((''),('万'),('亿'),('兆'));
      sUnitEx:Array[1..14] Of String[4]=((''),(''),(''),(''),('万'),('十'),('百'),
                                      ('千'),('亿'),('十'),('百'),('千'),('兆'),
                                      ('十') );
      sUnitEx1:Array[1..14] Of String[4]=((''),(''),(''),(''),('万'),('万'),('万'),
                                      ('万'),('亿'),('亿'),('亿'),('亿'),('兆'),
                                      ('兆') );
    var
      tempStr,TmpDecStr:ShortString;
      tempstr1:array[0..4] of char;
      L,i:integer;
      TAMA:boolean;
      sPartSum,sFirstPartNum:integer;
    begin
      if DecString='' then exit;
      TmpDecStr:=IntToStr(StrToInt64(DecString));
      L:=strlen(Pchar(String(TmpDecStr)));
      tempStr:='';
      TAMA:=TRUE;
      if L <= 4 then
      begin
        for i:=1 to L do
        if TmpDecStr[i]<>'0' then
        begin
         if (L-i+1)<5 then
           tempstr:=tempstr+HZStr[ord(TmpDecStr[i])-48]+sUnitB[L-i+1]
         else tempstr:=tempstr+HZStr[ord(TmpDecStr[i])-48]+sUnitEx[L-i+1];
         TAMA:=true;
        end else
        begin
          if ((L-i+1>1) and TAMA and (GetFirstNoZeroLen(TmpDecStr,i)>0)) then
          begin
           tempstr:=tempstr+sUnitEx1[L-i+1]+HZStr[ord(TmpDecStr[i])-48];
           TAMA:=false;
          end;//END IF
        end;//END ELSE
        if ((DecString[1]='0') and (GetFirstNoZeroLen(DecString,1)<>0)) then Result:='零'+tempStr
        else Result:=tempStr;
        exit;
      end;  if L mod 4<>0 then  sPartSum:=(L Div 4)+1
      else sPartSum:=(L Div 4);
      sFirstPartNum:=L Mod 4;
      if sFirstPartNum=0 then sFirstPartNum:=4;
      for i:=0 to sPartSum-1 do
      begin
        if i>0 then StrCopyEx(tempStr1,Pchar(String(TmpDecStr)),4*(i-1)+sFirstPartNum,4)
        else strcopyEx(tempStr1,Pchar(string(TmpDecStr)),0,sFirstPartNum);
        tempstr:=TempStr+DecStrToPStr(tempstr1)+sUnit[sPartSum-i];
      end;
      Result:=tempStr;
    end;
    //------------------------------------------------------------------------------
    function FloatToPStr(F:Double;Num:Integer):ShortString;
    CONST
      HZStr:array[0..10] of String[2]=(('零'),('壹'),('贰'),('叁'),('肆'),('伍'),('陆'),
                                      ('柒'),('捌'),('玖'),('拾'));
      sExtendUnit:Array[1..2] of String[2]=(('角'),('分'));
    var
      sTemp,sExtendPart:ShortString;
      iStrLen,iDotPosition:integer;
      i:integer;
      DecPartIsNull:Boolean;
    begin
      sTemp:=FloatToStr(F);
      iStrLen:=strlen(Pchar(String(sTemp)));
      iDotPosition:=Pos('.',sTemp);
      if iDotPosition>0 then //分离小数点前后数,并对正数部分转换
      begin
        sExtendPart:=strpos(pchar(String(sTemp)),'.')+1;
        sExtendPart[Num+1]:=#0;
        Delete(sTemp,iDotPosition,iStrLen-iDotPosition+1);
      end;
      DecPartIsNull:=False;
      if sTemp<>'' then
      begin
        sTemp:=DecStrToPStr(sTemp);
        if sTemp<>'' then
        begin
            if iDotPosition>0 then
                 sTemp:=sTemp+'元'
             else sTemp:=sTemp+'元整';    end else DecPartIsNull:=True;  end else DecPartIsNull:=True;  if iDotPosition>0 then  //处理小数部分的转换
      begin
        for i:=1 to StrLen(Pchar(String(sExtendPart))) do
        begin
          if sExtendPart[i]<>'0' then
            sTemp:=sTemp+HZStr[ord(sExtendPart[i])-48]+sExtendUnit[i]
          else  if not DecPartIsNull then
           sTemp:=sTemp+HZStr[ord(sExtendPart[i])-48]
        end;
      end;
      Result:=sTemp;
    end;
    //------------------------------------------------------------------------------
    function ConvertRMB(RMB:double):ShortString;
    begin
       result := '';
      if RMB = 0 then begin result := '零元整';exit;end;   //为零处理
      if RMB>99999999999999 then begin         //最大值处理
        result:='';exit;
      end;
      if RMB<0 then begin Result:='负';RMB:= RMB * -1; end;  //负数处理
       Result:=Result+FloatToPStr(RMB,2); //Abs :绝对值函数
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
    if Edit1.Text='' then
    begin
    application.MessageBox('不能为空值','提示',64);
    exit;
    end else
    showmessage(ConvertRMB(strtofloat(edit1.Text)));
    end;procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
    if not (key in ['0'..'9',#8,'.']) then key:=#0;
    end;end.