我用22行写了一个将数字型金额转化为大写汉字的函数,不知谁能给出更精简的?!

chinalht 2001-11-19 08:17:09
...全文
68 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
liu_nan 2001-11-20
  • 打赏
  • 举报
回复
能否贴出来看看,学习一下?
tlovexyj 2001-11-19
  • 打赏
  • 举报
回复
procedure TfmBMZC.BitBtn2Click(Sender: TObject);
const
chNum : array[0..9] of string = ('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
chBit : array[0..3] of string = ('圆','拾','佰','仟');
var
y, m, d : Word;
s : string;
len, n , tmp: integer;
bIsZero : Boolean;
begin
DecodeDate(Date, y, m, d);
jf:=jfjeChange(mEdJFJE.Text);

with fmPrint do begin
qrYear.Caption:=IntToStr(y);
qrMonth.Caption:=IntToStr(m);
qrDay.Caption:=IntToStr(d);

qrName.Caption:=EdName.Text;
qrNumber.Caption:='(学号:'+ EdXSBH.Text +')';

qrXMoney.Caption:=jf;

//对照表生成小写金额的大写
bIsZero:=false;
n:=Pos('.', jf); //小数点前的处理
if n=0 then
len:=Length(jf)
else
len:=n-1;
for n:=1 to len do begin
tmp:=StrToInt(jf[n]);
if tmp=0 then begin
if n<len then
bIsZero:=true
else if n=len then
s:=s + chBit[len-n];
end
else begin
if bIsZero then begin
s:=s+chNum[0]+chNum[tmp] + chBit[len-n];
bIsZero:=false;
end
else
s:=s+chNum[tmp] + chBit[len-n];
end;
end;

if Length(jf)>len then begin //小数点后的处理
if len+2<=Length(jf) then begin
tmp:=StrToInt(jf[len+2]);
if tmp=0 then
s:=s+'零'
else
s:=s+chNum[tmp]+'角';
end;
if len+3<=Length(jf) then
s:=s+chNum[StrToInt(jf[len+3])]+'分';
end;
qrDMoney.Caption:=s;

qrShow.Caption:='辅修报名注册费。';

qrHandler.Caption:=EdJSLS.Text;

qrSKSJ.Preview;
end;
end;
zuhuisu 2001-11-19
  • 打赏
  • 举报
回复
用递归只要五行

1,079

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧