贡献一个函数 Delphi 取大写金额: 123.12 -> 壹百贰拾叁元壹角贰分

这是一个Delphi函数,用于将小数形式的金额转换为中文大写金额字符串。例如,123.12会被转换为'壹百贰拾叁元壹角贰分'。函数首先处理负数和超出一定范围的数值,然后逐位转换数字并添加相应的中文单位。最后,根据需要添加'整'字。


function FloatToCCurrency(lfCurrency: Extended): string;
const
  sCNumber: array['0'..'9'] of string[2] = ('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
  sCUnit: array[0..14] of string[2] = ('万', '仟', '佰', '拾', '亿', '仟', '佰', '拾', '万', '仟', '佰', '拾', '元', '角', '分');
var
  lfAbsCur: Extended;
  sStr: string;
  iCurPos, iBegPos, iLen: Integer;
  bZeroAdded: Boolean;
begin
  lfAbsCur := Abs(lfCurrency);
  if lfAbsCur < 0.01 then
    Result := '零'
  else if lfAbsCur > 100000000000.00 then
    Result := '**'
  else
  begin
    if lfCurrency < 0 then
      Result := '负'
    else
      Result := '';
    bZeroAdded := False;
    sStr := FormatFloat('#', lfAbsCur * 100);
    iLen := Length(sStr);
    iBegPos := 15 - iLen;
    for iCurPos := iBegPos to 14 do
    begin
      if (sStr[iCurPos - iBegPos + 1] <> '0') then
      begin
        if (not bZeroAdded) and (iCurPos > iBegPos) and (sStr[iCurPos - iBegPos] = '0') then
        begin
          AppendStr(Result, '零');
          bZeroAdded := True;
        end;
        AppendStr(Result, sCNumber[sStr[iCurPos - iBegPos + 1]] + sCUnit[iCurPos]);
        bZeroAdded := False;
      end
      else if ((iCurPos = 4) or (iCurPos = 12)) or ((iCurPos = 8) and ((iLen < 11) or ((iLen >= 11) and (Copy(sStr, iLen - 9, 3) <> '000')))) then
        AppendStr(Result, sCUnit[iCurPos]);
    end;
    if sStr[iLen] = '0' then
      AppendStr(Result, '整');
  end;
end;

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值