Delphi 金额转大写

RAD Studio 10.2.3 测试√


使用实例

procedure TForm_Tips.Button_MoneyConvertClick(Sender: TObject);
var
  mMoneyNum: Real;
begin
  mMoneyNum := 00000000;       // 零元整
  Memo_Log.Lines.Add(MoneyConvert(mMoneyNum));

  mMoneyNum := 00100053;       // 壹拾万零伍拾叁元整
  Memo_Log.Lines.Add(MoneyConvert(mMoneyNum));

  mMoneyNum := 100.52;         // 壹佰元伍角贰分
  Memo_Log.Lines.Add(MoneyConvert(mMoneyNum));

  mMoneyNum := 1001.52;        // 壹仟零壹元伍角贰分
  Memo_Log.Lines.Add(MoneyConvert(mMoneyNum));

  mMoneyNum := 1000000000000;  // 壹万亿元整
  Memo_Log.Lines.Add(MoneyConvert(mMoneyNum));

  mMoneyNum := -1001.52;       // 负壹仟零壹元伍角贰分
  Memo_Log.Lines.Add(MoneyConvert(mMoneyNum));
end;

方法

function MoneyConvert(mmje: real): string;
const
  S1: string = '零壹贰叁肆伍陆柒捌玖';
  S2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';

  function StrReplace(const Str, OldValue, NewValue: string): string;
  begin
    Result := Str.Replace(OldValue, NewValue, [rfReplaceAll]);
  end;

var
  S, dx: string;
  i, Len: Integer;
begin
  S := '';
  dx := '';

  if mmje >= 9000000000000 then
  begin
    Result := '不能大于玖万亿元整';
    Exit;
  end;

  if mmje < 0 then
  begin
    dx := '负';
    mmje := -mmje;
  end;

  S := Format('%.0f', [mmje * 100]);  // 将这个数 *100 后去掉小数点
  Len := S.Length;
  for i := 0 to Len - 1 do
  begin
    dx := dx
          + S1.Substring(Ord(S.Chars[i]) - Ord('0'), 1)  // 在 S1 中取出这个数当前位转换为大写后的数字
          + S2.substring(Len - i - 1, 1);                // 在 S2 中取出这个数当前位的单位
  end;

  dx := StrReplace(dx, '零仟', '零');
  dx := StrReplace(dx, '零佰', '零');
  dx := StrReplace(dx, '零拾', '零');
  dx := StrReplace(dx, '零角', '零');

  dx := StrReplace(dx, '零零', '零');
  dx := StrReplace(dx, '零零', '零');
  dx := StrReplace(dx, '零零', '零');

  dx := StrReplace(dx, '零亿', '亿');
  dx := StrReplace(dx, '零万', '万');
  dx := StrReplace(dx, '零分', '整');
  dx := StrReplace(dx, '零元', '元');

  if dx = '整' then
    Result := '零元整'
  else
  begin
    dx := StrReplace(dx, '亿万', '亿零');
    dx := StrReplace(dx, '零元', '元');
    Result := dx;
  end;

// 如果不按金额转换,只转成大写数字,把下面的注释去掉
//  result := StrReplace(Result, '元', '点');
//  Result := StrReplace(Result, '角', '');
//  Result := StrReplace(Result, '分', '');
//  Result := StrReplace(Result, '点整', '');
end;

一点点笔记,以便以后翻阅。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小印丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值