主题:如何人民币大写?
yin710
[专家分:0] 发布于 2010-03-26 16:47:00
各位老师好,我在表单上有两个文本框,text1是数字的,text2是字符的。我想在text1输入数字后,text2能出现大写的人民币。谢谢老师
回复列表 (共12个回复)
沙发
wzxc [专家分:9440] 发布于 2010-03-26 17:25:00
PARAMETERS nAmount
PRIVATE ALL LIKE L_*
#define L_S1 "零壹贰叁肆伍陆柒捌玖"
#define L_S2 "亿仟佰拾万仟佰拾亿仟佰拾万仟佰拾元角分"
nAmount=LTRIM(STR(nAmount*100,LEN(L_S2)/2))
L_LEN=LEN(nAmount)
L_SS2=RIGHT(L_S2,2*L_LEN)
L_DX=""
L_0JS=0 && 连续零的个数
L_N=0
DO WHILE L_N<L_LEN
L_N=L_N+1
L_SZ=SUBSTR(nAmount,L_N,1)
L_SZ=SUBSTR(L_S1,2*VAL(L_SZ)+1,2)
L_DW=SUBSTR(L_SS2,2*L_N-1,2)
IF L_SZ='零'
L_SZ=""
DO CASE
CASE L_DW$"亿元"
CASE L_DW="万"
IF RIGHT(L_DX,2)="亿"
L_DW=""
ENDIF
OTHERWISE
L_DW=""
ENDCASE
L_0JS=L_0JS+1
ELSE
IF L_0JS>0
L_SZ="零"+L_SZ
ENDIF
L_0JS=0
ENDIF
L_DX=L_DX+L_SZ+L_DW
ENDDO
L_DX=L_DX+IIF(RIGHT(nAmount,1)="0","整","")
RETURN L_DX
这类资料网上很多,要善于搜索。
板凳
sywzs [专家分:5650] 发布于 2010-03-26 17:32:00
请参考:http://bbs.pfan.cn/post-295537.html
3 楼
yin710 [专家分:0] 发布于 2010-03-26 18:30:00
两位老师:我也在网上收集了很多这样的程序,但不能实现文本框里反映,试了很多遍,我想在text1输入数字后,text2能出现大写的人民币。另外wzxc老师的程序里很多不能运行的句子。谢谢老师
4 楼
北京惬意 [专家分:1330] 发布于 2010-03-26 20:02:00
wzxc老师是本论坛对人民币小写转大写最有研究的了,你那里运行不通多检查检查自己的问题。
5 楼
wzxc [专家分:9440] 发布于 2010-03-26 20:53:00
[quote]wzxc老师是本论坛对人民币小写转大写最有研究的了,你那里运行不通多检查检查自己的问题。[/quote]
老哥哥这样说我可有点受不起了!
以前自己写过一段又臭又长的转换代码。后来上的网来一看,那些精简的代码,真是叹为观止呀。
楼主是如何调用那段代码不得而知,反正是我程序中正在使用的。
6 楼
yin710 [专家分:0] 发布于 2010-03-26 21:50:00
wzxc老师,我确实不会使用你说的代码,我把放在程序里,运行提示几个句子不对。我把他放在表单里也不能运行。请老师指教。
7 楼
wzxc [专家分:9440] 发布于 2010-03-26 22:10:00
假设那段代码你存成zdx.prg
在文本框1的某事件
thisform.text2.value=zdx(thiform.text1.value)
thisform.text2.refresh
如果放到表单里作为自定义方法(假定方法名为zdx)
在文本框1的某事件
thisform.text2.value=thisform.zdx(thiform.text1.value)
thisform.text2.refresh
8 楼
yin710 [专家分:0] 发布于 2010-03-26 22:42:00
wzxc老师,你好,谢谢你的帮助,但应用后,如我输1245,出来了壹仟.涟。我输145,出来壹佰.潦,我输14,出来壹拾.猎。希望老师能找出我的原因,为什么出来后面的汉字呢?按你教的方法做的。
9 楼
sywzs [专家分:5650] 发布于 2010-03-27 08:14:00
我这里有一段代码,你把它存成PRG文件,比如:SZ2HZ.PRG
PARAMETERS NN
CC=DX(NN) &&转换成大写
c0=LEFT(CC,AT("亿",CC)+1)
CC=SUBSTR(CC,AT("亿",CC)+2)
c1=LEFT(CC,AT("万",CC)+1)
c2=SUBSTR(CC,AT("万",CC)+2)
c3=SUBSTR(CC,AT("元",CC)+2)
IF "角"$c3 AND LEFT(c3,2)="零"
c3=SUBSTR(c3,3)
ENDIF
c2=LEFT(c2,AT("元",c2)+1)
RETURN Del0(c0)+Del0(c1)+Del0(c2)+c3
FUNCTION DX
PARAMETERS nXX
PRIVATE ALL LIKE L_*
L_S1='零壹贰叁肆伍陆柒捌玖'
L_S2='亿仟佰拾万仟佰拾亿仟佰拾万仟佰拾元角分'
nXX=LTRIM(STR(nXX*100,LEN(L_S2)/2))
L_LEN=LEN(nXX)
L_SS2=RIGH(L_S2,2*L_LEN)
L_DX=''
L_0JS=0 &&连续零的个数
L_N=0
DO WHILE L_N<L_LEN
L_N=L_N+1
L_SZ=SUBSTR(nXX,L_N,1)
L_SZ=SUBSTR(L_S1,2*VAL(L_SZ)+1,2)
L_DW=SUBSTR(L_SS2,2*L_N-1,2)
IF L_SZ='零'
L_SZ=''
DO CASE
CASE L_DW$'亿元'
CASE L_DW='万'
IF RIGH(L_DX,2)='亿'
L_DW=''
ENDIF
OTHERWISE
L_DW=''
ENDCASE
L_0JS=L_0JS+1
ELSE
IF L_0JS>0
L_SZ='零'+L_SZ
ENDIF
L_0JS=0
ENDIF
L_DX=L_DX+L_SZ+L_DW
ENDDO
L_DX=L_DX+IIF(RIGH(nXX,1)='0','整','')
RETURN L_DX
ENDFUNC
FUNCTION Del0
PARAMETERS cStr
IF LEFT(cStr,2)="零"
cStr=SUBSTR(cstr,3)
ENDIF
Str1=cStr
DO WHILE AT("零",Str1)>0
Str1=STUFF(Str1,AT("零",Str1),2,"")
IF AT("零",Str1)=0
RETURN cStr
ELSE
cStr=Str1
ENDIF
ENDDO
RETURN cStr
***********
?"人民币(大写):"+SZ2HZ(120357056.0) &&命令行
或在表单中
THISFORM.text2.Value=SZ2HZ(VAL(THISFORM.text1.TEXT))
10 楼
wzxc [专家分:9440] 发布于 2010-03-27 11:47:00
我这里用得好好的。
你用竟然出现乱码。检查你的代码页。
我来回复