CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何将人民币小写转换为人民币大写,实现发票的打印功能?谢谢!

楼主liu_jianling(凌凌)2002-03-25 10:35:16 在 Delphi / VCL组件开发及应用 提问

如何将人民币小写转换为人民币大写,实现发票的打印功能?谢谢! 问题点数:100、回复次数:6Top

1 楼iceboy2000(不死鸟一辉)回复于 2002-03-25 10:42:04 得分 50

function   SmallTOBig(small:   real):   string;  
  var    
      SmallMonth,   BigMonth:   string;  
      wei1,   qianwei1:   string[2];  
      qianwei,   dianweizhi,   qian:   integer;  
      fs_bj:   boolean;  
  begin  
      if   small   <   0   then  
          fs_bj   :=   True  
      else  
          fs_bj   :=   False;  
      small             :=   abs(small);  
      {-------   修改参数令值更精确   -------}  
      {小数点后的位置,需要的话也可以改动-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(Smallmonth[qian])   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;  
   
      BigMonth   :=   FastReplace(BigMonth,   '零拾',   '零',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零佰',   '零',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零仟',   '零',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零角零分',   '',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零角',   '零',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零分',   '',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零零',   '零',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零零',   '零',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零零',   '零',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零亿',   '亿',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零万',   '万',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '零元',   '元',   False);  
      BigMonth   :=   FastReplace(BigMonth,   '亿万',   '亿',   False);  
      BigMonth   :=   BigMonth   +   '整';  
      BigMonth   :=   FastReplace(BigMonth,   '分整',   '分',   False);  
      if   BigMonth   =   '元整'   then  
          BigMonth   :=   '零元整';  
      if   copy(BigMonth,   1,   2)   =   '元'   then  
          BigMonth   :=   copy(BigMonth,   3,   length(BigMonth)   -   2);  
      if   copy(BigMonth,   1,   2)   =   '零'   then  
          BigMonth   :=   copy(BigMonth,   3,   length(BigMonth)   -   2);  
      if   fs_bj   =   True   then  
          SmallTOBig   :=   '-   '   +   BigMonth  
      else  
          SmallTOBig   :=   BigMonth;  
  end;  
   
   
  Top

2 楼V_Lucky(最优解)回复于 2002-03-25 10:43:45 得分 10

string   ls_bit[18]   =   {'仟','佰','拾','万','仟','佰','拾','亿','仟','佰','拾','万','仟','佰','拾','元','角','分'}string   ls_num[9]   =   {'壹','贰','叁','肆','伍','陆','柒','捌','玖'}string   ls_r   =   '',   ls_je,   ls_clong   i,   kls_je   =   string(   data   *   100,   fill(   '#',   18   -   1   )   +   '0'   )k   =   18   -   len(   ls_je   )   +   1for   i   =   k   to   18ls_c   =   mid(   ls_je,   i   -   k   +   1,   1   )if   ls_c   =   '0'   thenif   pos(   ls_bit[i   -   1],   '零'   )   >   0   then   ls_bit[i   -   1]   =   '';if   ls_bit[i]   <>   '亿'   and   ls_bit[i]   <>   '万'   and   ls_bit[i]   <>   '元'   then   ls_bit[i]   =   '零'elsels_bit[i]   =   ls_num[long(ls_c)]   +   ls_bit[i]end   ifnextif   ls_c   =   '0'   then   ls_bit[18]   =   '整'if   ls_bit[9]   =   ''   and   ls_bit[10]   =   ''   and   ls_bit[11]   =   ''   then   ls_bit[12]   =   ''for   i   =   k   to   18ls_r   =   ls_r   +   ls_bit[i]nextreturn   ls_rTop

3 楼iceboy2000(不死鸟一辉)回复于 2002-03-25 10:45:02 得分 0

Function   XiaoxieToDaxie(f   :   String)   :   String;  
  var  
        Fs,dx,d2,zs,xs,h,jg:string;  
        i,ws,{l,}w,j,lx:integer;  
  begin  
      f   :=   Trim(f);  
      if   copy(f,1,1)='-'   then   begin  
          Delete(f,1,1);fs:='负';end  
      else   fs:='';  
      dx:='零壹贰叁肆伍陆柒捌玖';  
      d2:='拾佰仟万亿';  
      i   :=   AnsiPos('.',f);       //小数点位置  
      if   i   =   0   Then  
            zs   :=   f           //整数  
      else   begin  
            zs:=copy(f,1,i   -   1);     //整数部分  
            xs:=copy(f,i   +   1,200);  
      end;  
      ws:=   0;   //l   :=   0;  
      for   i   :=   Length(zs)   downto   1   do   begin  
          ws   :=   ws   +   1;   h   :=   '';  
          w:=strtoint(copy(zs,   i,   1));  
          if   (w=0)   and   (i=1)   then   jg:='零';  
          If   w   >   0   Then  
                Case   ws   of  
                    2..5:h:=copy(d2,(ws-1)*2-1,2);  
                    6..8:begin  
                        h:=copy(d2,(ws-5)*2-1,2);  
                        If   AnsiPos('万',jg)=0   Then   h:=h+'万';  
                        end;  
                    10..13:h   :=   copy(d2,(ws-9)*2-1,   2);  
                End;  
          jg:=copy(dx,(w+1)*2-1,2)   +   h   +   jg;  
          If   ws=9   Then   jg   :=   copy(jg,1,2)   +   '亿'   +   copy(jg,3,200);  
      end;  
      j:=AnsiPos('零零',jg);  
      While   j   >   0   do   begin  
          jg   :=   copy(jg,   1,   j   -   1)   +   copy(jg,   j   +   2,200);  
          j   :=   AnsiPos('零零',jg);  
      end;  
      If   (Length(jg)   >   1)   And   (copy(jg,length(jg)-1,2)='零')   Then   jg   :=copy(jg,1,Length(jg)-2);  
      j   :=   AnsiPos('零亿',jg);  
      If   j   >   0   Then   jg   :=   copy(jg,1,   j   -   1)   +   copy(jg,   j   +   2,200);  
      //转换小数部分  
      lx   :=   Length(xs);  
      If   lx   >   0   Then   begin  
          jg   :=   jg   +   '元';  
          For   i   :=   1   To   lx   do   begin  
              if   i=1   then   begin  
                  jg   :=   jg   +   copy(dx,   strtoint(copy(xs,i,1))*2   +   1,   2);  
                  jg   :=   jg   +'角';  
              end;  
              if   i=2   then   begin  
                  jg   :=   jg   +   copy(dx,   strtoint(copy(xs,i,1))*2   +   1,   2);  
                  jg   :=   jg   +'分';  
              end;  
          end;  
          j   :=AnsiPos('零角零分',jg);  
          if   j>0   then   jg   :=   copy(jg,1,j-1)+copy(jg,j+8,200)+'整';  
          j   :=   AnsiPos('零角',jg);  
          i:=AnsiPos('零分',jg);  
          if   (j>0)   and   (i>0)   then   jg   :=   copy(jg,1,j-1)+copy(jg,j+4,200)  
          else   jg:=   copy(jg,1,j+1)+copy(jg,j+4,200);    
      End  
      else  
          jg   :=   jg   +   '元整';  
      result   :=   fs+jg;  
  end;  
   
  Top

4 楼webnumen(webnumen)回复于 2002-03-25 10:45:56 得分 20

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   do    
          begin    
              cc:=Vstr[iCount];    
              if   cc<>'   '   then    
                  begin    
                      zzz:=xxbb[iCount];    
                      if   cc='0'   then    
                      begin    
                          if   iZero<1   then   //*对“零”进行判断*//    
  cc:='零'    
  else    
  cc:='';    
  if   iCount=5   then   //*对万位“零”的处理*//    
  if   copy(result,length(result)-1,2)='零'   then    
  result:=copy(result,1,length(result)-2)+xxbb[iCount]  
  +'零'    
  else    
  result:=result+xxbb[iCount];    
  cc1:=cc;    
  zzz:='';    
  iZero:=iZero+1;    
  end    
  else    
  begin    
  if   cc='.'   then    
  begin    
  cc:='';    
  if   (cc1='')   or   (cc1='零')   then    
  begin    
  Presult:=copy(result,1,Length(result)-2);    
  result:=Presult;    
  iZero:=15;    
  end;    
  if   iZero>=1   then    
                                            zzz:=xxbb[9]    
                                      else    
                                            zzz:='';    
                                      vPoint:=1;    
                                  end    
                              else    
                                  begin    
                                      iZero:=0;    
                                      cc:=uppna[StrToInt(cc)];    
                                  end    
                          end;    
                      result:=result+(cc+zzz)    
                  end;    
          end;    
          If   Vstr[11]='0'   then       //*对小数点后两位进行处理*//    
          begin    
                if   Vstr[12]<>'0'   then    
                begin    
                      cc:='零';    
                      result:=result+cc;    
                      cc:=uppna[StrToInt(Vstr[12])];    
                      result:=result+(uppna[0]+cc+xxbb[12]);    
                end    
          end    
          else    
          begin    
                if   iZero=15   then    
                begin    
                      cc:='零';    
                      result:=result+cc;    
                end;    
                cc:=uppna[StrToInt(Vstr[11])];    
                result:=result+(cc+xxbb[11]);    
                if   Vstr[12]<>'0'   then    
                begin    
                      cc:=uppna[StrToInt(Vstr[12])];    
                      result:=result+(cc+xxbb[12]);    
                end;    
          end;    
      result:=result+'正';    
  end;    
  Top

5 楼ihihonline(潇潇->戒烟)回复于 2002-03-25 10:54:07 得分 10

http://www.csdn.net/expert/topic/458/458876.xml?temp=.6569178  
  http://www.csdn.net/expert/topic/229/229406.xml?temp=6.588161E-03  
  http://www.csdn.net/expert/topic/306/306772.xml?temp=.3519861  
  http://www.csdn.net/expert/topic/427/427440.xml?temp=.5346643  
  老大,查一下  
  有一大车Top

6 楼amiao(新湖居士)回复于 2002-03-25 11:08:49 得分 10

怎么不搜索一下先,下面是程序员大本营上的一篇,呵呵  
   
  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);”他自动默认小数点后两位Top

相关问题

  • 打印人民币大写问题(打印发票调用)!
  • 打印发票
  • 人民币大写转换的问题。
  • 打印发票的问题?
  • asp.net(C#)打印发票
  • 发票打印问题
  • 求一个人民币转换的函数!
  • 怎样将金额转换成人民币的大写?
  • 如何将人民币数字转换成大写?
  • 急急急!金额如何转换为人民币大写?

关键词

  • .net
  • 转换
  • ws
  • qianwei
  • bigmonth
  • wei
  • ls
  • 人民币
  • fastreplace
  • zs

得分解答快速导航

  • 帖主:liu_jianling
  • iceboy2000
  • V_Lucky
  • webnumen
  • ihihonline
  • amiao

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo