打印时,页合计如何转换成人民币大写?(88分)

  • 主题发起人 主题发起人 于小澜
  • 开始时间 开始时间
以前有过这个问题
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=213178

function RMB(NN:real):string;

implementation

function RMB(NN:real):string;
var
HZ,NS,NW,NA,N1,N2:string;
LA,X,Nk:integer;
begin

if NN>9999999999999.99 then

begin

MessageDlg('金额溢出.',mtError,[mbOk], 0);
HZ:='';
Result:=HZ;
exit;
end;

if NN=0 then

begin

HZ:='零元';
result:=HZ;
exit;
end;

NS:='零壹贰叁肆伍陆柒捌玖';
NW:='分角元拾佰仟万拾佰仟亿拾佰仟万';
NA:=FloatToStr(NN*100);
LA:=length(NA);
X:=1;
HZ:='';
while X<=LAdo

begin

NK:=Ord(NA[x])-Ord('0');
N1:=Copy(NS,NK*2+1,2);
N2:=Copy(NW,LA*2+1-X*2,2);
if (NK=0) AND ((N2='亿') OR( N2='万') OR( N2='元'))then

begin

if copy(HZ,Length(HZ)-1,2)='零' then

HZ:=copy(HZ,1,length(HZ)-2);
if copy(HZ,Length(HZ)-1,2)='亿' then

if N2='元' then

begin

N1:=N2;
N2:='零';
end
else

N2:=''
else

begin

N1:=N2;
N2:='零';
end
end
else
if NK=0 then

begin

if copy(HZ,length(HZ)-1,2)='零' then

N1:='';
if N2='分' then

begin

if copy(HZ,length(HZ)-1,2)='零' then

HZ:=copy(HZ,1,length(HZ)-2)+'整'
else

HZ:=HZ+'整';

N1:='';
end;

N2:='';
end;

HZ:=HZ+N1+N2;
X:=X+1
end;

Result:=HZ;
end;


调用时:

procedure TForm1.Edit1Change(Sender: TObject);
var num:real;
str:string;
i:integer;
begin

edit2.text:='';
str:=edit1.text;
if str<>'' then

try
num:=strtofloat(str);
if num<>0 then

begin

i:=0;
repeat
i:=i+1;
until (i=length(str)) or(str[i+1]='.');
if length(str)>i+3 then

delete(str,i+4,length(str)-i-3);
end;

num:=strtofloat(str);
edit2.text:=rmb(num);
except
on econverterrordo

begin

showmessage('check your input.');
edit1.text:='';
end;

end;

end;


自己再修改一下
 
Function CurrToCharNum(Number:Real):String;
var I,J,m,leng,leng1:Integer;
Str,Strs,s1,s2,s3:String;
const China:Array[1..10,1..2] of String=
(('0','零'),('1','壹'),('2','贰'),('3','叁'),('4','肆'),
('5','伍'),('6','陆'),('7','柒'),('8','捌'),('9','玖'));
Asi:Array[1..12] of String=('拾','亿','仟','佰','拾','万','仟','佰','拾','元','角','分');
begin

if Number>=2147483646.999 then

begin

ShowMessage('最大数只可支持到2147483646.99元');
Abort;
end;

m:=0;
Result :='';
Str:=IntToStr(Trunc(Number));
S1:=IntToStr(Round(100*(Number-int(Number))));
if length(s1)=1 then
S1:='0'+S1;
if length(s1)=0 then
S1:='00';
Str:=Str+S1;
leng:=length(Str);
for I :=lengdo
wnto 1do

begin

Strs:=copy(Str,I,1);
for J :=1 to 10do
if Strs=China[J,1] then
Strs :=China[J,2];
Result :=Strs+Asi[12-m] + Result;
m:=m+1;
end;

leng1:=length(Result);
s2:=copy(Result,leng1-7,8);
s3:=copy(Result,1,leng1-8);
if s2='零角零分' then
Result :=s3+'整';
end;


 
我问题的另一半是转换成大写后,
怎样显示在页合计中。
 
我现在用的是TQRExpr控件,如何让它把合计出来的金额
转换成大写,这才是我的意思。
 
用上面的算法用SQL写一存储过程,将TQREXPR与他相连即可
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部