在從事與財務相關的軟件開發過程中,通常要求將小寫金額轉換成相應的大寫金額,並打印在大寫金額欄中。下面是用Delphi3.0編制的一個轉換函數,能夠方便的在程序中調用,並返回字符串。
1.定義函數num—str
function num—str(ls: Variant): String;
var
dx—sz,dx—dw,str—int,str—dec,dx—str,fu:string;
a,b,b2,c,d:string;
num—int,num—dec,len—int,i,a—int,pp:integer;
//dx—str為返回字符串
begin
dx—sz:=′零壹貳三肆伍陸柒捌玖′;
dx—dw:=′萬仟佰拾億仟佰拾萬仟佰拾元′;
//處理金額小於零情況
if ls〈0 then
begin
ls:=ls(-1);
fu:=′負′;
end else fu:=′′;
//取得整數值及整數串
dx—str:=ls;
if (ls〉0)and(ls〈1) then dx—str:=′0′+dx—str;
pp:=pos(′.′,dx—str);
if pp〉0 then str—int:=copy(dx—str,1,pos(′.′,dx—str)-1)
else str—int:=dx—str;
num—int:=strtoint(str—int);
//取得小數值及小數串
if (ls〉0)and(ls〈1) then num—dec:=ls100
else num—dec:=(ls-num—int)100;
str—dec:=inttostr(num—dec);
len—int:=Length(str—int);
dx—str:=′′;
//轉換整數部分
for i:=1 to len—int do
begin
//a為小寫數字字符,b為對應的大寫字符
//c為對應大寫單位,d為當前大寫字符串的最後一個漢字
a:=copy(str—int,i,1);
a—int:=strtoint(a);
b:=copy(dx—sz,(a—int2+1),2);
c:=copy(dx—dw,((13-len—int+i-1)2+1),2);
if dx—str〈〉′′ then
d:=copy(dx—str,Length(dx—str)-1,2)
else d:=′′;
if (b=′零′)and((d=′零′)or(b=b2)or(c=′元′)or(c=′萬′)or(c=′億′)) then b:=′′;
if (a=′0′)and(c〈〉′元′)and(c〈〉萬′′)and(c〈〉′億′) then c:=′′;
if ((c=′元′)or(c=′萬′)or(c=′億′))and (d=′零′)and(a=′0′) then
begin
dx—str:=copy(dx—str,1,Length(dx—str)-2);
d:=copy(dx—str,Length(dx—str)-1,2);
if ((c=′元′)and(d=′萬′))or((c=′萬′)and(d=′億′)) then c:=′′;
end;
dx—str:=dx—str+b+c; b2:=b;
end;
//處理金額小於1的情況
if Length(dx—str)〈=2 then dx—str:=′′;
//轉換小數部分
if (num—dec〈10)and(ls〉0) then
begin
a—int:=strtoint(str—dec);
b:=copy(dx—sz,(a—int2+1),2);
if num—dec=0 then dx—str:=dx—str+′整′;
if num—dec〉0 then dx—str:=dx—str+′零′+b+′分′;
end;
if num—dec〉=10 then
begin
a—int:=strtoint(copy(str—dec,1,1));
a:=copy(dx—sz,(a—int2+1),2);
a—int:=strtoint(copy(str—dec,2,1));
b:=copy(dx—sz,(a—int2+1),2);
if a〈〉′零′ then a:=a+′角′;
if b〈〉′零′ then b:=b+′分′
else b:=′′;
dx—str:=dx—str+a+b;
end;
if ls=0 then dx—str:=′零元整′;
dx—str:=fu+dx—str;
//函數返回字符串
Result:=dx—str;
end;
2.調用方法
函數參數采用Variant類型,調用時參數值可以是實型,也可以是字符串,非常方便,下面舉例說明:
新建窗口,在相應pas文件中加入num—str函數,並在窗口中添加Button1和Edit1、Edit2控件,雙擊Button1輸入以下代碼,運行程序即可:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.text:=num—str(202055010.32);
//也可以在Edit2中輸入數串調用
//Edit1.text:=num—str(Edit2.text);
end;