金额转成大写

var
  Cdigs: array[0..9] of string = ('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
  Cdsets: array[1..18] of string = ('万','仟','佰','拾','亿', '仟','佰','拾','万','仟','佰','拾','圆','','角','分','厘','毫');

function THandySystem.GetCapitalWord(const aWord: real; aIsMoney: boolean): string;
var
  DStr, outStr, tmpstr: string;
  dsize, i: integer;
  CanZ: boolean;
begin
  if aIsMoney then
  begin
    Cdsets[13] := '圆';
    Cdsets[15] := '角';
    Cdsets[16] := '分';
    Cdsets[17] := '厘';
    Cdsets[18] := '毫';
  end
  else
  begin
    Cdsets[13] := '';
    Cdsets[15] := '';
    Cdsets[16] := '';
    Cdsets[17] := '';
    Cdsets[18] := '';
  end;

  CanZ := False;
  Dstr := FormatFloat('0.0000', aWord);
  dsize := Length(Dstr);
  outStr := '';
  for i := dsize Downto 1 do
  begin
    if Dstr[i]='0' then
    begin
      if Canz then
      begin
        if Dstr[i + 1] <> '.' then
        begin
          CanZ := False;
          tmpstr := '零'
        end
        else
        begin
          CanZ := true;
          tmpstr := ''
        end;
      end
      else
        tmpstr := '';

      if (CdSets[18-(Dsize-i)]=Cdsets[13]) or (CdSets[18-(Dsize-i)]='万') or (CdSets[18-(Dsize-i)]='亿') then
        tmpstr := CdSets[18-(Dsize-i)]+tmpstr;
    end
    else if Dstr[i]='.' then
    begin
      begin
        if (aIsMoney = false) and (Copy(dstr,dsize-3,4) <> '0000') then
          tmpstr := '点'
        else
          tmpStr := '';
      end
    end
    else if Dstr[i]='-' then
      TmpStr := '负'
    else
    begin
      tmpStr := Cdigs[StrToInt(Dstr[i])] + CdSets[18-(Dsize-i)];
      if Not CanZ then
        CanZ := true;
    end;
    OutStr := TmpStr+OutStr;
  end;
  if Copy(dstr, dsize - 2, 3) = '000' then
    if aIsMoney then
      OutStr := OutStr+ '整';

  Result := OutStr;
end;

posted @ 2011-07-30 10:08  神码都在云端  阅读(325)  评论(0编辑  收藏  举报