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;
一点点笔记,以便以后翻阅。