Delphi 金额转大写


本文整理自网络,侵删。

 
// 注意这里传进去的类型是  Currency  ,


function Money2ChineseCapital2(const Num: Currency ): WideString;
const  mnUnit: WideString ='分角元';
const  OtherWords: WideString='整负';
const  hzUnit: WideString = '拾佰仟万拾佰仟亿';
const  hzNum: WideString='零壹贰叁肆伍陆柒捌玖';
var
  szNum:PWideChar;
  i,iLen,iLen2, iNum, iAddZero,ResultCount:Integer;
  buff:AnsiString;
  buf:PAnsiChar;
  dblNum: Double;
begin
  SetLength(Result,33*2 + 1);
  iAddZero := 0;
  if Num < 0.0 then dblNum := Num * 100.0 + 0.5
  else dblNum := Num * 100.0 - 0.5;
  buff := format('%0.0f',[dblNum]);
  if Pos(buff,'e')>0 then begin
    SetLength(Result,0);
    Raise Exception.Create('数值过大!');
    Exit;
  end;
  iLen := Length(buff);
  szNum := PWideChar(Result);
  buf := PAnsiChar(buff);
  if(Num<0.0) then begin
    szNum^:=OtherWords[2];
    Inc(szNum);
    Inc(buf);
    Dec(iLen);
  end;
  for i:=1 to iLen do begin
    iNum :=Ord(buf^)-48;
    Inc(buf);
    iLen2 := iLen-i;
    if(iNum=0) then begin
      if(((iLen2-2) mod 4)=0) and ((iLen2-3)>0) and (((iLen2>=8) or (iAddZero<3))) then begin
        szNum^ := hzUnit[(iLen2-3) mod 8 + 1];
        Inc(szNum);
      end;
      Inc(iAddZero);
      if(iLen>1) and (iLen2=1) and (buff[iLen] <> '0') then begin
        szNum^:=hzNum[1];
        Inc(szNum);
      end;
    end
    else begin
      if(((iAddZero>0)and(iLen2>=2))and(((iLen2-1)mod 4)<>0)or((iAddZero>=4)and((iLen2-1)>0))) then begin
        szNum^:=hzNum[1];
        Inc(szNum);
      end;
      szNum^:=hzNum[iNum+1];
      Inc(szNum);
      iAddZero:=0;
    end;
    if (iAddZero<1)or(iLen2=2) then begin
      if(iLen-i>=3) then begin
        szNum^:=hzUnit[(iLen2-3) mod 8 + 1];
        Inc(szNum);
      end
      else begin
        szNum^:=mnUnit[(iLen2) mod 3 +1 ];
        Inc(szNum);
      end;
    end;
  end;
  ResultCount := szNum-PWideChar(Result);
  if((Num < 0.0) and (ResultCount - 1 = 0)) or ((Num>=0.0) and (ResultCount=0)) then begin
    szNum^:=hzNum[1];
    Inc(szNum);
    szNum^:=mnUnit[3];
    Inc(szNum);
    szNum^:=OtherWords[1];
    Inc(ResultCount,3);
  end
  else if((Num<0.0) and (buff[iLen+1] ='0')) or ((Num>=0.0) and (buff[iLen] ='0')) then begin
    szNum^:=OtherWords[1];
    Inc(ResultCount);
  end;
  SetLength(Result, ResultCount);
end;

//代码来源,广州佬

相关阅读 >>

Delphi 提高unigui开发效率的两个方法

Delphi 拖动文件到exe 打开 获取getcommandline命令行

Delphi 获取当前系统语言环境(en,fr,ja等)

Delphi treeview �c 自动展开树形结构

Delphi下载程序并且urldownloadtofile的进度提示

Delphi实现文件的拖放功能

Delphi 中判断windows系统是否是64位系统

Delphi使用文件拖放功能

Delphi xe6 android下捕获功能键

Delphi模拟点击网页中的按钮

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...