例如:
     要将 23。0元  转换  为贰拾叁点零元呢?

解决方案 »

  1.   

    给你一个完整的文档
    使用时只要  label1.caption:=getRMB(23.0)就可以了unit theRMB;interface
    uses classes, SysUtils, Dialogs;//金额转换为人民币大写
    function GetRMB(je: Real): string;
    function ChinaNumber(Num: Integer): string;
    function GetRMBIndex(T: string): Integer;implementationfunction GetRMBIndex(T: string): Integer;
    var
      UpperRMB: TStringList;
      i: Integer;
    begin
      Result := -1;
      UpperRMB := TStringList.Create;
      try
        UpperRMB.Add('元');
        UpperRMB.Add('拾');
        UpperRMB.Add('佰');
        UpperRMB.Add('千');
        UpperRMB.Add('万');
        UpperRMB.Add('拾');
        UpperRMB.Add('佰');
        UpperRMB.Add('千');
        UpperRMB.Add('亿');
        UpperRMB.Add('拾');
        UpperRMB.Add('佰');
        UpperRMB.Add('千');
        UpperRMB.Add('万');
        for i := 0 to UpperRMB.count - 1 do
          if T = UpperRMB.Strings[i] then begin
            Result := I;
            Break;
          end;
      finally
        UpperRMB.free;
      end;
    end;function GetRMB(je: Real): string;
    var
      TempStr, TempRMB: string;
      Temp: string;
      TempPrio, TempNext: Integer;
      cur_pos: Integer;
      i: Integer;
      UpperRMB: TStringList;
    begin
      try
        UpperRMB := TStringList.Create;
    //     UpperRMB.Add('');
        UpperRMB.Add('元');
        UpperRMB.Add('拾');
        UpperRMB.Add('佰');
        UpperRMB.Add('仟');
        UpperRMB.Add('万');
        UpperRMB.Add('拾');
        UpperRMB.Add('佰');
        UpperRMB.Add('千');
        UpperRMB.Add('亿');
        UpperRMB.Add('拾');
        UpperRMB.Add('佰');
        UpperRMB.Add('千');
        UpperRMB.Add('万');
        if je = 0 then begin
          Result := '';
          Exit;
        end;
        i := 0;
        TempStr := FloatToStr(je);
        cur_pos := pos('.', TempStr);
        if cur_pos > 0 then begin
          TempRMB := copy(TempStr, cur_pos + 1, 1);
          if TempRMB = '0' then
            Temp := '零'
          else
            Temp := ChinaNumber(StrToInt(TempRMB)) + '角';
          TempRMB := copy(TempStr, cur_pos + 2, 1);
          if TempRMB <> '' then
            Temp := Temp + ChinaNumber(StrToInt(TempRMB)) + '分';
          TempStr := copy(TempStr, 1, cur_pos - 1);
        end;
        for i := 1 to length(TempStr) do begin
          TempRMB := copy(TempStr, Length(TempStr), 1);
          if TempRMB = '0' then begin
            if ((i - 1) mod 4) = 0 then begin
              if copy(Result, 1, 2) <> '零' then
                Result := '零' + UpperRMB.Strings[I - 1] + Result
              else
                Result := UpperRMB.Strings[I - 1] + Result;
            end
            else begin
              if copy(Result, 1, 2) <> '零' then
                Result := '零' + Result;
            end;
          end
          else
            Result := ChinaNumber(StrToInt(TempRMB)) + UpperRMB.Strings[I - 1] + Result;
          TempStr := copy(TempStr, 1, Length(TempStr) - 1);
        end;
        cur_pos := pos('零', Result);
        TempStr := '';
        while cur_pos > 0 do begin
          if TempStr = Result then Break;
          TempStr := Result;
          TempPrio := GetRMBIndex(copy(Result, cur_pos - 2, 2));
          TempNext := GetRMBIndex(copy(Result, cur_pos + 2, 2));
          if (TempPrio < TempNext) then delete(Result, cur_pos, 2)
          else begin
            if (copy(Result, cur_pos - 2, 2) = '亿') and (copy(Result, cur_pos + 2, 2) = '万') then
              delete(Result, cur_pos, 4);
            if copy(Result, cur_pos + 2, 2) = '' then delete(Result, cur_pos, 2);
          end;
          cur_pos := pos('零', Result);
        end;
        if copy(Result, length(result) - 3, 2) = '零' then
          delete(result, length(result) - 3, 2);
        Result := Result + Temp;
      finally
        UpperRMB.Free;
      end;
    end;function ChinaNumber(Num: Integer): string;
    begin
      case Num of
        1: Result := '壹';
        2: Result := '贰';
        3: Result := '叁';
        4: Result := '肆';
        5: Result := '伍';
        6: Result := '陆';
        7: Result := '柒';
        8: Result := '捌';
        9: Result := '玖';
        0: Result := '零';
      else
        MessageDlg('数字输入错误!', mtError, [mbOK], 0);
      end;
    end;end.
      

  2.   

    我也写过,但这个函数好像有点问题,更完善代码更短的在家里.
    {金额转换成人民币大写字符串}
    Function NumberToRMB(Je:Real):String;
    Const
      JeStrList = '  分  角  元  拾  佰  千  万拾万佰万仟万  亿拾亿佰亿千亿';
      NumStrList = '零壹贰叁肆伍陆染捌玖';
    Var
      I : Integer;
      TempStr,RmbStr : String;
      Zero,IsY,IsM : Boolean;
    Begin
      TempStr := FloatToStr(Round(Je*100));
      RmbStr := '';
      For I:=0 To Length(TempStr)-1 Do
        RmbStr:=RmbStr+Copy(NumStrList,StrToInt(Copy(TempStr,I+1,1))*2+1,2)+Trim(Copy(JeStrList,(Length(TempStr)-I-1)*4+1,4));
      I := Length(RmbStr)-1;
      Zero := False;
      IsM := False;
      IsY := False;
      While I>0 Do Begin
        TempStr := Copy(RmbStr,I,2);
        IF TempStr ='零' Then Begin
           IF Copy(RmbStr,I+2,2)='元' Then Delete(RmbStr,I,2){零元 去掉零}
           Else IF Zero Then Delete(RmbStr,I,4) {第二次出现零时去掉四个字符}
                Else Delete(RmbStr,I+2,2);{第一次出现去掉零后面的两个字符}
            I:=I-2;
            Zero := True;
            Continue;
        End;
        I:=I-2;
        IF Pos(TempStr,NumStrList)<>0 Then Zero := False;
      End;
      IF mlRight(RmbStr,2)='零' Then RmbStr := Copy(RmbStr,1,Length(RmbStr)-2);
      IF mlRight(RmbStr,2)<>'分' Then RmbStr := RmbStr + '整';
      I:=Length(RmbStr)-1;
      While I>0 Do Begin //将多余的万与亿去掉;    10025000.01
        TempStr := Copy(RmbStr,I,2);
        IF TempStr='亿' Then IF IsY Then Begin Delete(RmbStr,I,2);  End Else IsY:=True; //去掉多余的亿
        IF TempStr='万' Then IF IsM Then Begin Delete(RmbStr,I,2);  End Else IsM:=True; //去掉多余的万
        I:=I-2;
      End;
      Result := RmbStr;
    End;
      

  3.   

    look!http://218.56.11.178:8020/web/index.aspx
    -》 下载基地-》例程-经典应用-》金额小写转大写
      

  4.   

    小写金额转换
    www.lvyin.net  2002-7-30 绿荫网络  如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来转换),但是它几乎可以无限制的转换,只要你能读得出来和写得进去:function Tform1.SmallTOBig(small:real):string;
    var SmallMonth,BigMonth:string;
    wei1,qianwei1:string[2];
    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;调用如下edit1.text:=SmallTOBig(1234567890.1234);他自动默认小数点后两位