金额转换

 Function  XxToDx(hjnum:real):String;stdcall;
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;

//小写金额转换
//如下为一个简单的小写金额转换为大写的函数,其思路简单(可以说烂吧,居然利用了位置来
//转换),但是它几乎可以无限制的转换,只要你能读得出来和写得进去:
function SmToBig(small:real):string;stdcall;
var SmallMonth,BigMonth:string;
    wei1,qianwei1:string[2];
    wei,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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值