Delphi版金额大写(人民币大写读数)代码

  1.  uses
  2.         math;
  3. const  mnUnit:WideString ='分角元';
  4. const  OtherWords:WideString='整负';
  5. const  hzUnit:WideString = '拾佰仟万拾佰仟亿';
  6. const  hzNum:WideString='零壹贰叁肆伍陆柒捌玖';
  7. function Money2ChineseCapital2(const Num:double ): WideString;
  8. var
  9.    szNum:PWideChar;
  10.    i,iLen,iLen2, iNum, iAddZero,ResultCount:Integer;
  11.    buff:AnsiString;
  12.    buf:PAnsiChar;
  13.    dblNum: Double;
  14. begin
  15.    SetLength(Result,33*2 + 1);
  16.    iAddZero := 0;
  17.    if Num < 0.0 then
  18.     dblNum := Num * 100.0 + 0.5
  19.   else
  20.     dblNum := Num * 100.0 - 0.5;
  21.    buff := format('%0.0f',[dblNum]);
  22.    if Pos(buff,'e')>0 then begin
  23.     SetLength(Result,0);
  24.     Raise Exception.Create('数值过大!');
  25.     Exit;
  26.    end;
  27.    iLen := Length(buff);
  28.    szNum := PWideChar(Result);
  29.    buf := PAnsiChar(buff);
  30.    if(Num<0.0then
  31.    begin
  32.       szNum^:=OtherWords[2];
  33.       Inc(szNum);
  34.       Inc(buf);
  35.       Dec(iLen);
  36.    end;
  37.    for i:=1 to iLen do
  38.    begin
  39.       iNum :=Ord(buf^)-48;
  40.       Inc(buf);
  41.       iLen2 := iLen-i;
  42.       if(iNum=0then
  43.       begin
  44.          if(((iLen2-2mod 4)=0and ((iLen2-3)>0and (((iLen2>=8or (iAddZero<3))) then
  45.          begin
  46.             szNum^ := hzUnit[(iLen2-3mod 8 + 1];
  47.             Inc(szNum);
  48.          end;
  49.          Inc(iAddZero);
  50.          if(iLen>1and (iLen2=1and (buff[iLen] <> '0'then
  51.          begin
  52.             szNum^:=hzNum[1];
  53.             Inc(szNum);
  54.          end;
  55.       end
  56.       else
  57.       begin
  58.          if(((iAddZero>0and (iLen2>=2)) and (((iLen2-1mod 4)<>0or ((iAddZero>=4and ((iLen2-1)>0))) then
  59.          begin
  60.             szNum^:=hzNum[1];
  61.             Inc(szNum);
  62.          end;
  63.          szNum^:=hzNum[iNum+1];
  64.          Inc(szNum);
  65.          iAddZero:=0;
  66.       end;
  67.       if (iAddZero<1or (iLen2=2then
  68.       begin
  69.          if(iLen-i>=3then
  70.          begin
  71.             szNum^:=hzUnit[(iLen2-3mod 8 + 1];
  72.             Inc(szNum);
  73.          end
  74.          else
  75.          begin
  76.             szNum^:=mnUnit[(iLen2) mod 3 +1 ];
  77.             Inc(szNum);
  78.          end;
  79.       end;
  80.    end;
  81.    ResultCount := szNum-PWideChar(Result);
  82.    if((Num < 0.0and (ResultCount - 1 = 0)) or ((Num>=0.0and (ResultCount=0)) then
  83.    begin
  84.       szNum^:=hzNum[1];
  85.       Inc(szNum);
  86.       szNum^:=mnUnit[3];
  87.       Inc(szNum);
  88.       szNum^:=OtherWords[1];
  89.       Inc(szNum);
  90.       Inc(ResultCount,3);
  91.    end
  92.    else
  93.    if((Num<0.0and (buff[iLen+1] ='0')) or ((Num>=0.0and (buff[iLen] ='0')) then
  94.    begin
  95.       szNum^:=OtherWords[1];
  96.       Inc(ResultCount);
  97.    end;
  98.    SetLength(Result, ResultCount);
  99. end;

 Function   CovMoney(money   :   Double)   :   String;   //小写金额转换成大写金额  
  Var  
      sStr,   buf,   sPower,   buf1   :   String;  
      i,   j,   iPosition,   lenth,   iTmp   :   Integer;  
      flag0   :   boolean;  
   
        Function   Sjoin(Var   buff   :   String;   sString   :   String;   digit   :   String;   nextdig   :   String;   iPos   :   Integer)   :   Integer;  
        Var  
            dig   :   String;   //   *   1  
            flag0   :   Boolean;  
        Begin  
            flag0   :=   True;  
   
            If   digit   =   '0'   Then  
                If   nextdig   <>   '0'   Then  
                    dig   :=   '零'  
                Else  
                    flag0   :=   False;  
            If   digit   =   '1'   Then  
                dig   :=   '壹';  
            If   digit   =   '2'   Then  
                dig   :=   '贰';  
            If   digit   =   '3'   Then  
                dig   :=   '叁';  
            If   digit   =   '4'   Then  
                dig   :=   '肆';  
            If   digit   =   '5'   Then  
                dig   :=   '伍';  
            If   digit   =   '6'   Then  
                dig   :=   '陆';  
            If   digit   =   '7'   Then  
                dig   :=   '柒';  
            If   digit   =   '8'   Then  
                dig   :=   '捌';  
            If   digit   =   '9'   Then  
                  dig   :=   '玖';  
   
            If   digit   =   '0'   Then  
                If   (flag0   =   True)   And   (iPos   <>   0)   Then  
                Begin  
                    buff   :=   buff   +   dig;  
                    Result   :=   2;  
                End  
                Else  
                    Result   :=   0  
            Else  
            Begin  
                buff   :=   buff   +   dig;  
                buff   :=   buff   +   sString;  
                Result   :=   4;  
            End;  
        End;  
  Begin  
      If   money   =   0   Then  
      Begin  
          Result   :=   '零元整';  
          exit;  
      End;  
      iPosition   :=   0;  
      buf1   :=   trim(Format('%12.2f',   [money]));  
   
      lenth   :=   Length(buf1);  
      buf   :=   '                                 ';   //     16   bit   space;  
      j   :=   1;  
      For   i   :=   16   -   lenth   To   15   Do  
      Begin  
          buf[i]   :=   buf1[j];  
          j   :=   j   +   1;  
      End;  
   
      For   i   :=   1   To   15   Do  
      Begin  
          iTmp   :=   ord(buf[i]);  
          If   ((iTmp   >=   49)   And   (iTmp   <=   58))   Or   (chr(iTmp)   =   ',')   Then  
              break;  
      End;  
      While   i   <=   15   Do  
      Begin  
          flag0   :=   True;  
          iTmp   :=   0;  
          Case   i   -   1   Of  
              0,   4,   8   :   sPower   :=   '仟';  
              1,   5,   9   :   sPower   :=   '佰';  
              2,   6,   10   :   sPower   :=   '拾';  
              3   :  
                  Begin  
                      sPower   :=   '亿';  
                      If   copy(buf,   i,   1)   =   '0'   Then  
                      Begin  
                          sStr   :=   sStr   +   sPower+'零';  
                          iPosition   :=   iPosition   +   2;  
                          iTmp   :=   1;  
                      End;  
                  End;  
              7   :  
                  Begin  
                      sPower   :=   '万';  
                      If   copy(buf,   i,   1)   =   '0'   Then  
                      Begin  
                          sStr   :=   sStr   +   sPower+'零';  
                          iPosition   :=   iPosition   +   2;  
                          iTmp   :=   1;  
                      End;  
                  End;  
              11   :  
                  Begin  
                      sPower   :=   '元';  
                      If   (copy(buf,   i,   1)   =   '0')   And   (iPosition   <>   0)   Then  
                      Begin  
                          sStr   :=   sStr   +   sPower;  
                          iPosition   :=   iPosition   +   2;  
                          iTmp   :=   1;  
                      End;  
                  End;  
              12   :  
                  Begin  
                      flag0   :=   False;  
                      If   (copy(buf,   i   +   1,   1)   =   '0')   And   (copy(buf,   i   +   2,   1)   =   '0')   Then  
                      Begin  
                          sPower   :=   '整';  
                          sStr   :=   sStr   +   sPower;  
                          iPosition   :=   iPosition   +   2;  
                          iTmp   :=   2;  
                      End;  
                  End;  
              13   :   sPower   :=   '角';  
              14   :  
                  Begin  
                      If   copy(buf,   i,   1)   =   '0'   Then   iTmp   :=   2;  
                      sPower   :=   '分';  
                  End;  
          End;  
          If   (flag0   =   True)   And   (iTmp   =   0)   Then  
              Begin  
                  If   i   >   0   Then  
                      iPosition   :=   iPosition   +   Sjoin(sStr,   sPower,   copy(buf,   i,   1),   copy(buf,   i   +   1,   1),   iPosition)  
                  Else  
                      iPosition   :=   iPosition   +   Sjoin(sStr,   sPower,   copy(buf,   i,   1),   copy(buf,   i,   1),   iPosition);  
              End;  
          If   iTmp   =   2   Then  
              break  
          Else  
              i   :=   i   +   1;  
      End;  
  //     If   (ilength   <>   0)   Then   ilength   :=   iPosition;  
      If   pos('整',   sStr)   <   1   then  
      begin  
        if   (pos('角',   sStr)   <   1)   and   (pos('分',   sStr)   <   1)   Then  
            sStr   :=   sStr   +   '整';  
      end;  
          sStr   :=stringreplace(sStr,'零零','零',[rfReplaceAll]);  
          sStr   :=stringreplace(sStr,'零元','元',[rfReplaceAll]);  
          Result   :=   Trim(sStr);  
  End;  

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值