把金额由数字变成大写的小程序(对编写财务软件非常的有用)
1、编写如下函数。该函数的返回值能够舍去数字之间的零,比较准确,符合会计准则,比较适合打印银行存单等。
PARA RMB
SET TALK OFF
XX=LTRIM(STR(RMB,11,2))
RMBLEN=LEN(XX)
DX='零'
C1='零壹贰叁肆伍陆柒捌玖'
C2='分角 元拾佰仟万拾佰仟'
*----------------
DO WHILE RMB>0.AND.RMBLEN>=1
DB=SUBS(XX,LEN(XX)-RMBLEN+1,1)
IF DB#'.'
DX1=SUBS(C1,VAL(DB)*2+1,2)
DX2=TRIM(SUBS(C2,(RMBLEN-1)*2+1,2))
IF DX1='零'
HZ=SUBS(DX,LEN(DX)-1,2)
IF HZ='零'
IF DX2='万'.OR.DX2='元'
DX=SUBS(DX,1,LEN(DX)-2)+DX2
ENDI
ELSE
IF DX2='万'.OR.DX2='元'
DX=SUBS(DX,1,LEN(DX))+DX2
ELSE
DX=DX+DX1
ENDIF
ENDIF
ELSE
DX=DX+DX1+DX2
ENDI
ENDIF
RMBLEN=RMBLEN-1
ENDDO
IF SUBS(DX,1,2)='元'
DX=SUBS(DX,3,LEN(DX)-2)
ENDI
IF SUBS(DX,1,2)='零'
DX=+SUBS(DX,3,LEN(DX)-2)
ENDI
IF SUBS(DX,LEN(DX)-1,2)='零'
DX=SUBS(DX,1,LEN(DX)-2)+'整'
ENDI
SET TALK ON
RETU DX
2、编写如下函数。该函数的返回值比较适合于一些单据的填空式打印,如增值税发票等。
para rmb
nDzs=strt(allt(str(rmb,15,2)),".","") &&把小数点去掉
hzdx="零壹贰叁肆伍陆柒捌玖"
nDW="分角元拾佰仟万拾佰仟亿拾佰仟"
rmbdx=""
nCd=len(nDzs)
for i=1 to len(nDzs)
NumS=substrc(hzdx,int(val(subs(nDzs,i,1))+1),1) && 数字转换
nDWs=substrc(nDW,nCd,1) &&----------要单位,如果不要单位可将此句改为:nDWs=spac(2)
rmbdx=rmbdx+NumS+nDwS
nCd=nCd-1
endfor
retu rmbdx