今天找到一个思路,用分段的方法实现了人民币大写转小写的功能,最大到千亿。细节待完善
function GetSegmentValue(RMB: string; const segmentChar: Char): Int64;
var
I: Integer;
allsum: Int64;
CurrChar: Char;
Temp: Int64;
Digits: string;
begin
Digits := '零壹贰叁肆伍陆柒捌玖';
allsum := 0;
Temp := 0;
for I := 1 to Pos(segmentChar, RMB) do
begin
CurrChar := RMB[I];
if Pos(CurrChar, Digits) > 0 then
begin
Temp := Pos(CurrChar, Digits) - 1;
end;
if Pos(CurrChar, '仟佰拾' + segmentChar) > 0 then
begin
if CurrChar = '仟' then
Temp := Temp * 1000
else if CurrChar = '佰' then
Temp := Temp * 100
else if CurrChar = '拾' then
Temp := Temp * 10
else if CurrChar = segmentChar then
Temp := Temp * 1;
allsum := allsum + Temp;
Temp := 0;
end;
end;
Result := allsum;
end;
function ConvertRMB(var RMB: string): Double;
var
YiPos: Integer;
Digits: string;
begin
Result := 0;
YiPos := Pos('亿', RMB);
// 处理“亿”前面的部分
if YiPos > 0 then
begin
Result := Result + GetSegmentValue(RMB, '亿') * 100000000;
Delete(RMB, 1, YiPos);
end;
// 处理“万”前面的部分
YiPos := Pos('万', RMB); // 重新定位
if YiPos > 0 then
begin
Result := Result + GetSegmentValue(RMB, '万') * 10000;
Delete(RMB, 1, YiPos);
end;
// 处理“元”前面的部分
YiPos := Pos('元', RMB); // 重新定位
if YiPos > 0 then
begin
Result := Result + GetSegmentValue(RMB, '元');
Delete(RMB, 1, YiPos);
end;
YiPos := Pos('角', RMB); // 重新定位
if YiPos > 0 then
begin
Result := Result + GetSegmentValue(RMB, '角') * 0.1;
Delete(RMB, 1, YiPos);
end;
YiPos := Pos('分', RMB); // 重新定位
if YiPos > 0 then
Result := Result + GetSegmentValue(RMB, '分') * 0.01;
end;