Function CapitalizeMoney(aMoney: Double; aIsUnit: Boolean; var oMoneyStr:
string): string; //小写人民币转换成大写人民币
function InttoUpperCase(Xiao: string): string;
begin
case StrToInt(Xiao) of
0: Result := '零';
1: Result := '壹';
2: Result := '贰';
3: Result := '叁';
4: Result := '肆';
5: Result := '伍';
6: Result := '陆';
7: Result := '柒';
8: Result := '捌';
9: Result := '玖';
end;
end;
var
IntPart: string;
DecPart: string;
RMBDecAry: array[0..3] of string[2];
RMBIntAry: array[0..17] of string[2];
LenIntPart: Integer;
i, j: Integer;
begin
try
if aMoney > 100000000 then
begin
Result := '数值超出范围!';
Exit;
end;
//初始化
for i := 0 to 3 do RMBDecAry[i] := '';
for i := 0 to 17 do RMBIntAry[i] := '';
RMBIntAry[0] := '元';
RMBIntAry[2] := '拾';
RMBIntAry[4] := '佰';
RMBIntAry[6] := '仟';
RMBIntAry[8] := '万';
RMBIntAry[10] := '拾';
RMBIntAry[12] := '佰';
RMBIntAry[14] := '仟';
RMBIntAry[16] := '亿';
//分解数字
IntPart := IntToStr(trunc(aMoney));
DecPart := FormatFloat('0.00', aMoney);
DecPart := Copy(DecPart, Length(DecPart) - 1, 2);
//先判断小数位(角分)
if aIsUnit then
begin
if DecPart = '00' then DecPart := ''
else
begin
RMBDecAry[0] := InttoUpperCase(DecPart[1]);
if DecPart[1] <> '0' then RMBDecAry[1] := '角';
if Decpart[2] <> '0' then
begin
RMBDecAry[2] := InttoUpperCase(DecPart[2]);
RMBDecAry[3] := '分';
end;
DecPart := '';
for i := 0 to 3 do DecPart := DecPart + RmbDecAry[i];
end;
end
else //分开
begin
DecPart := IntToUpperCase(DecPart[1]) + ' ' + IntToUpperCase(DecPart[2])
+
' ';
end;
//判断整数位
if IntPart = '0' then IntPart := ''
else
begin
LenIntPart := Length(IntPart);
for i := 0 to LenIntPart - 1 do
RMBIntAry[i * 2 + 1] := InttoUpperCase(IntPart[LenIntPart - i]);
if not aIsUnit then
begin //分开
IntPart := '';
for i := LenIntPart - 1 downto 0 do
IntPart := IntPart + RMBIntAry[i * 2 + 1] + ' ';
end
else
begin
i := 0;
while IntPart[LenIntPart - i] = '0' do
begin //判断10的倍数
if (i <> 0) and (RMBIntAry[i * 2] <> '万') then
RMBIntAry[i * 2] := '';
RMBIntAry[i * 2 + 1] := '';
i := i + 1;
end;
j := 0;
//除零判断,第一位,最后一位不为零
for i := 1 to LenIntPart * 2 - 1 do //从个位开始
if (RMBIntAry[i] = '零') then
if j = 0 then
begin
j := i; //第一个0
if RMBIntAry[j - 1] <> '万' then RMBIntAry[j - 1] := '';
end
else //不是第一个零
begin
if i - j > 2 then
begin
j := i; //零中间有间隔
if RMBIntAry[j - 1] <> '万' then RMBIntAry[j - 1] := '';
end
else //删除前一个零
begin
j := i;
RMBIntAry[j] := '';
if RMBIntAry[j - 1] <> '万' then RMBIntAry[j - 1] := '';
end;
end;
if RMBIntAry[9] = '零' then RMBIntAry[9] := ''; //万前的零判断
IntPart := '';
for i := 0 to LenIntPart * 2 - 1 do IntPart := RMBIntAry[i] + IntPart;
LenIntPart := Length(IntPart);
if Copy(IntPart, 1, 4) = '壹拾' then
Intpart := Copy(IntPart, 3, LenIntPart); //壹拾判断
end;
end;
oMoneyStr := IntPart + DecPart;
except
Result := '错误';
end;
end;