回 帖 发 新 帖 刷新版面

主题:如何人民币大写?

各位老师好,我在表单上有两个文本框,text1是数字的,text2是字符的。我想在text1输入数字后,text2能出现大写的人民币。谢谢老师

回复列表 (共12个回复)

沙发

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
这类资料网上很多,要善于搜索。

板凳

请参考:http://bbs.pfan.cn/post-295537.html

3 楼

两位老师:我也在网上收集了很多这样的程序,但不能实现文本框里反映,试了很多遍,我想在text1输入数字后,text2能出现大写的人民币。另外wzxc老师的程序里很多不能运行的句子。谢谢老师

4 楼

wzxc老师是本论坛对人民币小写转大写最有研究的了,你那里运行不通多检查检查自己的问题。

5 楼

[quote]wzxc老师是本论坛对人民币小写转大写最有研究的了,你那里运行不通多检查检查自己的问题。[/quote]

老哥哥这样说我可有点受不起了!

以前自己写过一段又臭又长的转换代码。后来上的网来一看,那些精简的代码,真是叹为观止呀。

楼主是如何调用那段代码不得而知,反正是我程序中正在使用的。

6 楼

wzxc老师,我确实不会使用你说的代码,我把放在程序里,运行提示几个句子不对。我把他放在表单里也不能运行。请老师指教。

7 楼

假设那段代码你存成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 楼

wzxc老师,你好,谢谢你的帮助,但应用后,如我输1245,出来了壹仟.涟。我输145,出来壹佰.潦,我输14,出来壹拾.猎。希望老师能找出我的原因,为什么出来后面的汉字呢?按你教的方法做的。

9 楼

我这里有一段代码,你把它存成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 楼

我这里用得好好的。
你用竟然出现乱码。检查你的代码页。

我来回复

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