回 帖 发 新 帖 刷新版面

主题:求助:银行票据小写元、角、分的问题

想搞一个票据打印,遇到了难题:例如数值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




回复列表 (共13个回复)

沙发

请打开下面的连接 
http://bbs.pfan.cn/post-307062.html

板凳

[quote]请打开下面的连接 
http://bbs.pfan.cn/post-307062.html[/quote]

谢谢您!
可能是我表达不清楚。我要的不是大、小转换。
我的意思是:如何能够把小写数值123.45元,变为小写数组1、2、3、4、5,然后按百、十、元、角、分,分别对应插入票据上相应的小写空格。
也就是把123.45元拆分为1、2、3、4、5后,分别对应显示在小写空格百、十、元、角、分上。

3 楼

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 楼

[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 楼

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 楼

[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 楼

据我所知,固定票据写法也有好几种:
1.如果是上面有固定的元角分的,下面填写就可以用:"1234"打在相应空格中了
2.如果是横着添加就不能用:1234添加了,还需要转换大写的"壹贰叁肆"了

8 楼

[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 楼

用下面的函数将数值转换为字符型,转换后的字符是全角符号,主要是为了解决人民币符号“¥”:
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 楼

[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]

太好了!此方法可行,万分感谢!
能写出完整的源码出来吗?比方说:转换后的字符如何对应插入小写元、角、分栏中?如何加上¥符号?
再次表示谢意!!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册