求一个将数字转换成人民币大写形式的函数!!

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/1617/1617382.xml?temp=.5198175
      

  2.   

    我也是从csdn中down的
    {**** 金额转中文大写 ****}
    function MoneyToUpper(const NumBer:Double):String;
    var StrNumber,AUpperNum,AMoneyUnit:String;
        UpperNum:array[0..9] of String;
        MoneyUnit:array[1..16]of String;
        VI:Integer;
        VAZero,VAZnum:Boolean;
        VN:Double;
    begin
      UpperNum[1] := '壹' ;
      UpperNum[2] := '贰' ;
      UpperNum[3] := '叁' ;
      UpperNum[4] := '肆' ;
      UpperNum[5] := '伍' ;
      UpperNum[6] := '陆' ;
      UpperNum[7] := '柒' ;
      UpperNum[8] := '捌' ;
      UpperNum[9] := '玖' ;  MoneyUnit[1]  := '万' ;
      MoneyUnit[2]  := '仟' ;
      MoneyUnit[3]  := '佰' ;
      MoneyUnit[4]  := '拾' ;
      MoneyUnit[5]  := '亿' ;
      MoneyUnit[6]  := '仟' ;
      MoneyUnit[7]  := '佰' ;
      MoneyUnit[8]  := '拾' ;
      MoneyUnit[9]  := '万' ;
      MoneyUnit[10] := '仟' ;
      MoneyUnit[11] := '佰' ;
      MoneyUnit[12] := '拾' ;
      MoneyUnit[13] := '元' ;
      MoneyUnit[14] := '.'  ;
      MoneyUnit[15] := '角' ;
      MoneyUnit[16] := '分' ;  VAZero := False ;
      AUpperNum := '' ;
      AMoneyUnit := '' ;
      result := '';
      if NumBer < 0 then
      begin
        result := '负' ;
        VN := - NumBer ;
      end
      else
        VN := NumBer ;
      Str(VN:16:2,StrNumber);  for VI := 1 to 16 do
      begin
        if StrNumber[VI] <> ' ' then
        begin
          AMoneyUnit := MoneyUnit[VI];
          if StrNumber[VI] = '0' then
          begin
            if VAZero and (copy(result,Length(result)-1,2)='零') then
              result := copy(result,1,Length(result)-2);
            case VI of
              1..4,6..8,10..12:begin      // 万,仟,佰,拾
                                AUpperNum := '零' ;
                                AMoneyUnit := '' ;
                              end;
              5,9,13:          begin      // 亿,万,元
                                if StrToFloat(StrNumber) < 1 then AMoneyUnit := '' ;
                                AUpperNum := '' ;
                              end;
              15:              begin      // 角
                                if StrToFloat(StrNumber) < 1 then AUpperNum := ''
                                else AUpperNum := '零' ;
                                AMoneyUnit := '' ;
                              end;
              16:              begin      // 分
                                AUpperNum := '' ;
                                AMoneyUnit := '' ;
                              end;
            end;
            VAZero := True ;
          end
          else
          begin
            if StrNumber[VI] = '.' then
            begin
              AUpperNum := '';
              AMoneyUnit := '';
            end
            else
            begin
              VAZero := False ;
              AUpperNum := UpperNum[StrToInt(StrNumber[VI])];
            end
          end;
          result := result + (AUpperNum + AMoneyUnit);
        end;
      end;
      for vi:=1 to length(result) do
        if (copy(result,vi,2)='角') or (copy(result,vi,2)='分') then
          vaznum:=true;
      if vaznum=true then
        result:=result
        else
          begin
            if result='' then
              result :='零元整'
              else
                result := result + '整' ;
          end;
    end;
      

  3.   

    function TOBig(small: real): string;
    var
      SmallMonth, BigMonth: string;
      wei1, qianwei1: string[2];
      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;
      result := BigMonth;
    end;