怎样在FastReport中实现转大写金额?

tmxjh 2003-12-23 10:41:48
我想把一个字段的合计数在FastReport中转换成大写金额,请问应该怎样做,先谢谢了!
...全文
636 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
tmxjh 2003-12-29
  • 打赏
  • 举报
回复
谢谢各位,尤其是火鸟,我自己也找到了怎样从报表传到Form的方法,:)
结帖了!!
huoniao1976 2003-12-25
  • 打赏
  • 举报
回复
自己写函数
AnsiString get_dx(AnsiString ls_no)
{ AnsiString ls_dx;
switch (StrToInt(ls_no))
{ case 0:ls_dx="零";break;
case 1:ls_dx="壹";break;
case 2:ls_dx="贰";break;
case 3:ls_dx="叁";break;
case 4:ls_dx="肆";break;
case 5:ls_dx="伍";break;
case 6:ls_dx="陆";break;
case 7:ls_dx="柒";break;
case 8:ls_dx="捌";break;
case 9:ls_dx="玖";break;
}
return ls_dx;
}
//---------------------------------------------------------------------------
AnsiString get_Dx_ZS(AnsiString ls_No)
{ AnsiString ls_Dx;
if(ls_No.Length()==1)
{ ls_Dx=get_dx(ls_No);
ls_Dx=ls_Dx+"元";
return ls_Dx;
}
if(ls_No.Length()==2)
{ AnsiString ls_a=get_dx(ls_No.SubString(1,1));
AnsiString ls_b=get_dx(ls_No.SubString(2,1));
ls_Dx=ls_a+"拾"+ls_b+"元";
return ls_Dx;
}
if(ls_No.Length()==3)
{ AnsiString ls_c=get_dx(ls_No.SubString(1,1));
AnsiString ls_d=get_dx(ls_No.SubString(2,1));
AnsiString ls_e=get_dx(ls_No.SubString(3,1));
ls_Dx=ls_c+"佰"+ls_d+"拾"+ls_e+"元";
return ls_Dx;
}
if(ls_No.Length()==4)
{ AnsiString ls_f=get_dx(ls_No.SubString(1,1));
AnsiString ls_g=get_dx(ls_No.SubString(2,1));
AnsiString ls_h=get_dx(ls_No.SubString(3,1));
AnsiString ls_i=get_dx(ls_No.SubString(4,1));
ls_Dx=ls_f+"仟"+ls_g+"佰"+ls_h+"拾"+ls_i+"元";
return ls_Dx;
}
if(ls_No.Length()==5)
{ AnsiString ls_j=get_dx(ls_No.SubString(1,1));
AnsiString ls_k=get_dx(ls_No.SubString(2,1));
AnsiString ls_l=get_dx(ls_No.SubString(3,1));
AnsiString ls_m=get_dx(ls_No.SubString(4,1));
AnsiString ls_n=get_dx(ls_No.SubString(5,1));
ls_Dx=ls_j+"万"+ls_k+"仟"+ls_l+"佰"+ls_m+"拾"+ls_n+"元";
return ls_Dx;
}
if(ls_No.Length()==6)
{ AnsiString ls_o=get_dx(ls_No.SubString(1,1));
AnsiString ls_p=get_dx(ls_No.SubString(2,1));
AnsiString ls_q=get_dx(ls_No.SubString(3,1));
AnsiString ls_r=get_dx(ls_No.SubString(4,1));
AnsiString ls_s=get_dx(ls_No.SubString(5,1));
AnsiString ls_t=get_dx(ls_No.SubString(6,1));
ls_Dx=ls_o+"拾万"+ls_p+"万"+ls_q+"仟"+ls_r+"佰"+ls_s+"拾"+ls_t+"元";
return ls_Dx;
}
}
AnsiString get_Dx_XS(AnsiString ls_No)
{ AnsiString ls_Dx;
if(ls_No.Length()==1)
{ ls_Dx=get_dx(ls_No);
ls_Dx=ls_Dx+"角零分";
return ls_Dx;
}
if(ls_No.Length()==2)
{ AnsiString ls_a=get_dx(ls_No.SubString(1,1));
AnsiString ls_b=get_dx(ls_No.SubString(2,1));
ls_Dx=ls_a+"角"+ls_b+"分";
return ls_Dx;
}
else
{ ls_Dx="零角零分";
return ls_Dx;
}
}
tmxjh 2003-12-25
  • 打赏
  • 举报
回复
我要的是从报表传值给Form,不是从Form传值给报表啊
Chimae 2003-12-25
  • 打赏
  • 举报
回复
自己写个函数返回不就行了吗?我没写过,不然可以发给你,呵呵!网上有源码的,找找看,然后在报表里赋值
frReport1->FindObject("Momo37")->Memo->Strings[0] = sReturn(double dMoney);
tmxjh 2003-12-24
  • 打赏
  • 举报
回复
我想把计算的合计值传给程序后再变换成大写,但传值过来的时候总是该Memo的表达式,而不是值,请问问题错在哪?

dJinE = frReport1->FindObject("Momo37")->Memo->Values;
tmxjh 2003-12-24
  • 打赏
  • 举报
回复
我怎么找不到StrToRmb()函数啊.
ljlln 2003-12-24
  • 打赏
  • 举报
回复
不行的话你可以自己写个函数把小写转成大写也可以吗!!!^_^
Chimae 2003-12-24
  • 打赏
  • 举报
回复
本来就是嘛,王海峰的ReportMachine就是从FastReport中改过来的,呵呵!
zzddqq 2003-12-24
  • 打赏
  • 举报
回复
FastReport中也有,函数名为STRTORMB()。
yjkarmon 2003-12-24
  • 打赏
  • 举报
回复
reportmachine里面有大写金额函数,
tmxjh 2003-12-24
  • 打赏
  • 举报
回复
zzddqq:
我指的是fastReport2.5版本,是汉化过的,有STR()函数,就是没有StrToRmb()函数,请问你是用的什么版本的?
constantine 2003-12-24
  • 打赏
  • 举报
回复
小写转成大写好象有人做过,去CHINABCB看看 。
zzddqq 2003-12-24
  • 打赏
  • 举报
回复
在报表中放一个Memo,点击插入表达式按扭,点击fx函数按扭,选择字符串,就可以找到StrToRmb()。你不是要在报表中合计再转换成大写吗?还传给程序干吗?

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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