风
风雨燕归来
Unregistered / Unconfirmed
GUEST, unregistred user!
这是一个在fastreport中自定义一个金额小写转大写的问题,如下:
(你别看了简单就跑,关键是如何有fastreport连接)
function TGzb.Currency(rmb:real):string;
var s1,s2,s3,s4,dxs:string;
l,l1,l2,l3:integer;
begin
s1:='分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟万';
s2:='零壹贰叁肆伍陆柒捌玖';
l:=length(floattostr(rmb));
if copy(floattostr(rmb),l-2,1)='.' then
begin
dxs:=floattostr(abs(rmb));
end
else
begin
if copy(floattostr(rmb),l-1,1)='.' then
dxs:=floattostr(abs(rmb))+'0'
else
dxs:=floattostr(abs(rmb))+'.00'
end;
l1:=length(dxs);
dxs:=copy(dxs,1,l1-3)+copy(dxs,l1-1,2);
s3:='';
l2:=length(dxs);
l3:=0;
while l2>0do
begin
s3:=copy(s1,l3*2+1,2)+s3;
s3:=copy(s2,strtoint(copy(dxs,l2,1))*2+1,2)+s3;
l2:=l2-1;
l3:=l3+1;
end;
s4:='';
l2:=1;
while l2<length(s3)do
begin
if copy(s3,l2,2)='零' then
begin
if copy(s3,l2+2,2)='万' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'万'
else
s4:=s4+'万';
end;
if copy(s3,l2+2,2)='圆' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'圆'
else
s4:=s4+'圆';
end;
if copy(s3,l2+2,2)='亿' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'亿'
else
s4:=s4+'亿';
end;
if copy(s4,length(s4)-1,2)<>'零' then
s4:=s4+'零';
end
else
s4:=s4+copy(s3,l2,4);
l2:=l2+4;
end;
if copy(s4,length(s4)-3,4)='圆零' then
begin
s4:=copy(s4,1,length(s4)-2)+'整';
end;
if copy(s4,length(s4)-3,4)='角零' then
begin
s4:=copy(s4,1,length(s4)-2)+'整';
end;
if copy(s4,length(s4)-1,2)='零' then
begin
s4:=copy(s4,1,length(s4)-2)+'圆整';
end;
result:=s4;
end;
//将以上函数转为fastreport的自定义函数。
procedure TGzb.frReport1UserFunction(const Name: String;
p1, p2,
p3: Variant;
var Val: Variant);
begin
// try
if AnsiCompareText('NumtoRmb', Name) = 0 then
val := currency(p1);
// except
// end;
end;
1 .结果总是提示:被转化的字段是一个无效的浮点值。
([xxxx] is not a valid floating point value)
2 .把function TGzb.Currency(rmb:real):string;换成为:
function TGzb.Currency(rmb:string):string;(接口函数等都作了改变)
但又提示:不能由string转为double值。
晕。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我想了整整一个晚上了,好心的大富翁们,帮帮我吧。
是从晚上22:00-6:00哪。没分了,给20分吧。
(你别看了简单就跑,关键是如何有fastreport连接)
function TGzb.Currency(rmb:real):string;
var s1,s2,s3,s4,dxs:string;
l,l1,l2,l3:integer;
begin
s1:='分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟万';
s2:='零壹贰叁肆伍陆柒捌玖';
l:=length(floattostr(rmb));
if copy(floattostr(rmb),l-2,1)='.' then
begin
dxs:=floattostr(abs(rmb));
end
else
begin
if copy(floattostr(rmb),l-1,1)='.' then
dxs:=floattostr(abs(rmb))+'0'
else
dxs:=floattostr(abs(rmb))+'.00'
end;
l1:=length(dxs);
dxs:=copy(dxs,1,l1-3)+copy(dxs,l1-1,2);
s3:='';
l2:=length(dxs);
l3:=0;
while l2>0do
begin
s3:=copy(s1,l3*2+1,2)+s3;
s3:=copy(s2,strtoint(copy(dxs,l2,1))*2+1,2)+s3;
l2:=l2-1;
l3:=l3+1;
end;
s4:='';
l2:=1;
while l2<length(s3)do
begin
if copy(s3,l2,2)='零' then
begin
if copy(s3,l2+2,2)='万' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'万'
else
s4:=s4+'万';
end;
if copy(s3,l2+2,2)='圆' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'圆'
else
s4:=s4+'圆';
end;
if copy(s3,l2+2,2)='亿' then
begin
if copy(s4,length(s4)-1,2)='零' then
s4:=copy(s4,1,length(s4)-2)+'亿'
else
s4:=s4+'亿';
end;
if copy(s4,length(s4)-1,2)<>'零' then
s4:=s4+'零';
end
else
s4:=s4+copy(s3,l2,4);
l2:=l2+4;
end;
if copy(s4,length(s4)-3,4)='圆零' then
begin
s4:=copy(s4,1,length(s4)-2)+'整';
end;
if copy(s4,length(s4)-3,4)='角零' then
begin
s4:=copy(s4,1,length(s4)-2)+'整';
end;
if copy(s4,length(s4)-1,2)='零' then
begin
s4:=copy(s4,1,length(s4)-2)+'圆整';
end;
result:=s4;
end;
//将以上函数转为fastreport的自定义函数。
procedure TGzb.frReport1UserFunction(const Name: String;
p1, p2,
p3: Variant;
var Val: Variant);
begin
// try
if AnsiCompareText('NumtoRmb', Name) = 0 then
val := currency(p1);
// except
// end;
end;
1 .结果总是提示:被转化的字段是一个无效的浮点值。
([xxxx] is not a valid floating point value)
2 .把function TGzb.Currency(rmb:real):string;换成为:
function TGzb.Currency(rmb:string):string;(接口函数等都作了改变)
但又提示:不能由string转为double值。
晕。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我想了整整一个晚上了,好心的大富翁们,帮帮我吧。
是从晚上22:00-6:00哪。没分了,给20分吧。