主题:求助:银行票据小写元、角、分的问题
lgx6
[专家分:0] 发布于 2009-10-04 21:15:00
想搞一个票据打印,遇到了难题:例如数值123.45元,不知道如何将其对应插入百、十、元、角、分栏中。
请各位老师帮帮忙,最好能够提供个源码,先谢谢了!
****************************************************************
我在上面表达的不清楚。我要的不是人民币大小写转换。
我的意思是:如何能够把小写数值123.45元,变为小写数组1、2、3、4、5,然后按百、十、元、角、分,分别对应插入票据上相应的小写空格。
也就是把123.45元拆分为1、2、3、4、5后,分别对应显示在小写空格百、十、元、角、分上。
**********************************************************************************
下面的是我从网上抄来的,我没看出有什么问题,但运行时没反应,请教教我怎么用。
Dimension aa(11)
aa(11)=Thisform.je11
aa(10)=Thisform.je10
aa(9)=Thisform.je9
aa(8)=Thisform.je8
aa(7)=Thisform.je7
aa(6)=Thisform.je6
aa(5)=Thisform.je5
aa(4)=Thisform.je4
aa(3)=Thisform.je3
aa(2)=Thisform.je2
aa(1)=Thisform.je1
For m.i=1 To 11
If aa((m.i)).Value>0
If m.i>1
aa(m.i-1).Value ="¥"
Exit
Endif
Endif
ENDFOR
最后更新于:2009-10-06 16:49:00
回复列表 (共13个回复)
沙发
sywzs [专家分:5650] 发布于 2009-10-05 05:58:00
请打开下面的连接
http://bbs.pfan.cn/post-307062.html
板凳
lgx6 [专家分:0] 发布于 2009-10-05 12:11:00
[quote]请打开下面的连接
http://bbs.pfan.cn/post-307062.html[/quote]
谢谢您!
可能是我表达不清楚。我要的不是大、小转换。
我的意思是:如何能够把小写数值123.45元,变为小写数组1、2、3、4、5,然后按百、十、元、角、分,分别对应插入票据上相应的小写空格。
也就是把123.45元拆分为1、2、3、4、5后,分别对应显示在小写空格百、十、元、角、分上。
3 楼
sywzs [专家分:5650] 发布于 2009-10-06 04:40:00
n=123.45
m=STR(n,6,2)
dime sz(6)
for i=1 to 6
sz(i)=SUBSTR(m,i,1)
next
?sz(1),sz(2),sz(3),sz(5),sz(6)
4 楼
lgx6 [专家分:0] 发布于 2009-10-06 16:27:00
[quote]n=123.45
m=STR(n,6,2)
for i=1 to 6
sz(i)=SUBSTR(m,i,1)
next
?sz(1),sz(2),sz(3),sz(5),sz(6)
[/quote]
谢谢您的指点。
我试过了,出错。可能是我不会用。
5 楼
sywzs [专家分:5650] 发布于 2009-10-07 06:42:00
n=123456789.45
m=STR(n,12,2)
dime sz(12)
for i=1 to 12
sz(i)=SUBSTR(m,i,1)
next
?sz(1),"亿"
?sz(2),"千万"
?sz(3),"百万"
?sz(4),"十万"
?sz(5),"万"
?sz(6),"千"
?sz(7),"百"
?sz(8),"十"
?sz(9),"元"
?sz(11),"角"
?sz(12),"分"
如果整数部分大于9位数,可把12换成更大的值。上面只是举个例子,其实可以判断n的长度来替换代码中的12, 如:j=len(allt(str(n,15,2)))
3楼漏写了 dime sz(6),已补上了。
6 楼
yjr3032570 [专家分:3360] 发布于 2009-10-07 08:40:00
[quote]n=123456789.45
m=STR(n,12,2)
dime sz(12)
for i=1 to 12
sz(i)=SUBSTR(m,i,1)
next
?sz(1),"亿"
[color=FF0000]?sz(2),"千万"
?sz(3),"百万"
?sz(4),"十万"[/color]
?sz(5),"万"
?sz(6),"千"
?sz(7),"百"
?sz(8),"十"
?sz(9),"元"
?sz(11),"角"
?sz(12),"分"
如果整数部分大于9位数,可把12换成更大的值。上面只是举个例子,其实可以判断n的长度来替换代码中的12, 如:j=len(allt(str(n,15,2)))
3楼漏写了 dime sz(6),已补上了。[/quote]
修改一下:
?sz(2),"千"
?sz(3),"百"
?sz(4),"十"
7 楼
yjr3032570 [专家分:3360] 发布于 2009-10-07 08:49:00
据我所知,固定票据写法也有好几种:
1.如果是上面有固定的元角分的,下面填写就可以用:"1234"打在相应空格中了
2.如果是横着添加就不能用:1234添加了,还需要转换大写的"壹贰叁肆"了
8 楼
lgx6 [专家分:0] 发布于 2009-10-07 18:57:00
[quote]n=123456789.45
m=STR(n,12,2)
dime sz(12)
for i=1 to 12
sz(i)=SUBSTR(m,i,1)
next
?sz(1),"亿"
?sz(2),"千万"
?sz(3),"百万"
?sz(4),"十万"
?sz(5),"万"
?sz(6),"千"
?sz(7),"百"
?sz(8),"十"
?sz(9),"元"
?sz(11),"角"
?sz(12),"分"
如果整数部分大于9位数,可把12换成更大的值。上面只是举个例子,其实可以判断n的长度来替换代码中的12, 如:j=len(allt(str(n,15,2)))
3楼漏写了 dime sz(6),已补上了。[/quote]
请教:我是在TEXT1文本框上输入小写金额,如何才能把小写金额分别对应插入已设定的SZ(1)、SZ(2)...文本框中?上面的源码我试过了,就是不知如何处理这样的问题。
请多指教,谢谢!!!
9 楼
dfwxj [专家分:270] 发布于 2009-10-07 22:54:00
用下面的函数将数值转换为字符型,转换后的字符是全角符号,主要是为了解决人民币符号“¥”:
func chrmb
para nrmb
local crmb,snum,srmb,i
nrmb=int(nrmb*100)
crmb=iif(nrmb<0,'负','¥')
snum='0123456789'
srmb=allt(str(abs(nrmb),20))
for i=1 to len(srmb)
crmb=crmb+subs(snum,val(subs(srmb,i,1))*2+1,2)
endf
retu crmb
转换后的字符串去掉了小数点,存放在一个字段中,左端用空格补足,长度为数据位数*2(含小数位),例如:cje,
repl cje with padl(chrmb(je),20,' ') &&长度依实际单据位数确定
在设计报表时,每一个小格放一个域控件,内容依次为:
subs(cje,1,2)
subs(cje,3,2)
subs(cje,5,2)
....
...
subs(cje,19,2)
10 楼
lgx6 [专家分:0] 发布于 2009-10-08 01:10:00
[quote]用下面的函数将数值转换为字符型,转换后的字符是全角符号,主要是为了解决人民币符号“¥”:
func chrmb
para nrmb
local crmb,snum,srmb,i
nrmb=int(nrmb*100)
crmb=iif(nrmb<0,'负','¥')
snum='0123456789'
srmb=allt(str(abs(nrmb),20))
for i=1 to len(srmb)
crmb=crmb+subs(snum,val(subs(srmb,i,1))*2+1,2)
endf
retu crmb
转换后的字符串去掉了小数点,存放在一个字段中,左端用空格补足,长度为数据位数*2(含小数位),例如:cje,
repl cje with padl(chrmb(je),20,' ') &&长度依实际单据位数确定
在设计报表时,每一个小格放一个域控件,内容依次为:
subs(cje,1,2)
subs(cje,3,2)
subs(cje,5,2)
....
...
subs(cje,19,2)
[/quote]
太好了!此方法可行,万分感谢!
能写出完整的源码出来吗?比方说:转换后的字符如何对应插入小写元、角、分栏中?如何加上¥符号?
再次表示谢意!!!
我来回复