小写金额转为大写,该怎么处理

小写金额转为大写
各位,在VF中怎么把小写金额转为大写啊,急用,谢谢拉!
这是之前的方法,但是不正确。
se2=""
se2=alltrim(str(se1,10,2))
selen=len(se2)

ds1=space(2)
ds2=space(2)
ds3=space(2)
ds4=space(2)
ds5=space(2)
ds6=space(2)
ds7=space(2)
ds=""
if selen=8
ds1=dx(subs(se2,1,1))
ds2=dx(subs(se2,2,1))
ds3=dx(subs(se2,3,1))
ds4=dx(subs(se2,4,1))
ds5=dx(subs(se2,5,1))
ds6=dx(subs(se2,7,1))
ds7=dx(subs(se2,8,1))

ds="¥"+ds1+"万"+ds2+"仟"+ds3+"佰"+ds4+"拾"+ds5+"元"+ds6+"角"+ds7+"分"

endif
if selen=7

ds2=dx(subs(se2,1,1))
ds3=dx(subs(se2,2,1))
ds4=dx(subs(se2,3,1))
ds5=dx(subs(se2,4,1))
ds6=dx(subs(se2,6,1))
ds7=dx(subs(se2,7,1))
ds="¥"+ds2+"仟"+ds3+"佰"+ds4+"拾"+ds5+"元"+ds6+"角"+ds7+"分"
endif

if selen=6
ds3=dx(subs(se2,1,1))
ds4=dx(subs(se2,2,1))
ds5=dx(subs(se2,3,1))
ds6=dx(subs(se2,5,1))
ds7=dx(subs(se2,6,1))
ds="¥"+ds3+"佰"+ds4+"拾"+ds5+"元"+ds6+"角"+ds7+"分"
endif
if selen=5
ds4=dx(subs(se2,1,1))
ds5=dx(subs(se2,2,1))
ds6=dx(subs(se2,4,1))
ds7=dx(subs(se2,5,1))
ds="¥"+ds4+"拾"+ds5+"元"+ds6+"角"+ds7+"分"
endif

if selen=4.and.val(subs(se2,1,1))>0
ds5=dx(subs(se2,1,1))
ds6=dx(subs(se2,3,1))
ds7=dx(subs(se2,4,1))
ds="¥"+ds5+"元"+ds6+"角"+ds7+"分"
endif
if selen=4.and.subs(se2,1,1)="0".and.val(subs(se2,3,1))>0

ds6=dx(subs(se2,3,1))
ds7=dx(subs(se2,4,1))
ds="¥"+ds6+"角"+ds7+"分"
endif

if selen=4.and.subs(se2,1,1)="0".and.val(subs(se2,3,1))=0.and.val(subs(se2,4,1))>0
ds7=dx(subs(se2,4,1))
ds="¥"+ds7+"分"
endif
**************

function dx
parameter se3
if se3="1"
se11="壹"
endif
if se3="2"
se11="贰"
endif
if se3="3"
se11="叁"
endif
if se3="4"
se11="肆"
endif
if se3="5"
se11="伍"
endif
if se3="6"
se11="陆"
endif
if se3="7"
se11="柒"
endif
if se3="8"
se11="捌"
endif
if se3="9"
se11="玖"
endif
if se3="0"
se11="零"
endif
return se11

------解决方案--------------------
VBScript code
如何将金额由小写变为大写?

*----------------------------------

1、编写如下函数。该函数的返回值能够舍去数字之间的零,比较准确,符合会计准则,比较适合打印银行存单等。
*----以下代码存入一个dx.prg中,即建立自定义函数----*
PARAMETERS nAmount
PRIVATE ALL LIKE L_*
L_S1='零壹贰叁肆伍陆柒捌玖'
L_S2='亿仟佰拾万仟佰拾亿仟佰拾万仟佰拾元角分'
nAmount=LTRIM(STR(nAmount*100,LEN(L_S2)/2))
L_LEN=LEN(nAmount)
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(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 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(nAmount,1)='0','整','')
RETURN L_DX

*----调用方式为----*
?dx(124.22)

2、编写如下函数。该函数的返回值比较适合于一些单据的填空式打印,如增值税发票等。
PARAMETERS nAmount,IsDW
nDZS=STRTRAN(ALLTRIM(STR(nAmount,18,2)),".","") &&把小数点去掉
cHZDX="零壹贰叁肆伍陆柒捌玖"
cDW="分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟亿"
cRMBDX=""
nCd=LEN(nDZS)
FOR i=1 TO LEN(nDZS)
    cNumbers=SUBSTRC(cHZDX,INT(VAL(SUBSTR(nDZS,I,1))+1),1) && 数字转换 
    IF IsDW=1 &&如果要单位
        cDWs=SUBSTRC(cDW,nCd,1) 
    ELSE 
        cDWs=SPACE(0) &&不要单位的情况下
    ENDIF 
    cRMBDX=cRMBDX+cNumbers+cDWS
    nCd=nCd-1
ENDFOR 
RETURN cRMBDX


3、

*----调用方式为----*
?camount(123)

FUNCTION Camount
    parameter Mamount
    MyAmount=alltrim(str(abs(Mamount)*100,11,0))
    temp=len(alltrim(MyAmount))
    chr_amount=''
    For i = 1 TO temp
        MYmemo=val(subs(MyAmount, temp-i+1, 1))
        chr_amount =subs("零壹贰叁肆伍陆柒捌玖", MYmemo*2+1, 2)+subs("分角圆拾佰仟万拾佰仟亿", i*2-1, 2)+ chr_amount
    EndFor
    chr_amount=iif(Mamount<0,'负'+chr_amount,chr_amount)
    return chr_amount
endFUNC

4、

*处理9万亿以下的数字没有问题.在接近10万亿的时候,部分会有错误结果...

*----调用方式为----*
?chandx(123)

PROCEDURE chandx
    PARAMETERS mmje  &&输入变量:数字型,小于9万亿,大于-9万亿
    PRIVATE dx,aa,i
    dx=IIF(mmje<0,'负','')
    aa=ROUND(ABS(mmje)*100,0)
    FOR i=LEN(ALLTRIM(STR(aa,15)))-1 TO 0 STEP -1
        dx=dx+SUBS('零壹贰叁肆伍陆柒捌玖',INT(ROUND(aa/10^i,10))*2+1,2)+SUBS('分角元拾佰仟万拾佰仟亿拾佰仟万',i*2+1,2)
        aa=MOD(aa,10^i)
    ENDFOR
    dx=STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(dx,'零仟','零'),'零佰','零'),'零拾','零'),'零角','零'),'零分','整')
    dx=STRTRAN(STRTRAN(STRTRAN(STRTRAN(STRTRAN(dx,'零零','零'),'零零','零'),'零亿','亿'),'零万','万'),'零元','元')
RETURN IIF(dx='整','零元整',STRTRAN(STRTRAN(dx,'亿万','亿'),'零整','整'))


5、

中文货币转化函数
支持16位有效数字的任意金额,16位以上也能支持,但只是从高位起16位以后的被四舍五入了,与会计规范写法基本一致(请教过专业会计)大家放心用吧。

*----调用方式为----*
?TransformMoney(123)

FUNCTION TransformMoney
LPARAMETER lnmoney
LOCAL lnolddecimal
lnolddecimal=SET("decimal")
SET DECIMAL TO 6
IF TYPE("lnmoney")<>"N"
    RETURN ""
ENDIF
LOCAL lcstr1,lcstr2
lcstr1="分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟万拾佰仟亿拾佰仟万"
lcstr2="零壹贰叁肆伍陆柒捌玖"
LOCAL lnremain,lnlen,lnnum,lcsign,lcmoney
IF lnmoney<0
    lcsign="负"
    lnmoney=0-lnmoney
ELSE
    lcsign=""
ENDIF
lnmoney=ROUND(lnmoney,2)
IF lnmoney=0
    lcmoney="零元整"
    SET DECIMAL TO lnolddecimal
    RETURN lcmoney
ENDIF
lnmoney=lnmoney*100
lnremain=lnmoney
lnlen=INT(LOG10(lnmoney))+1
lcmoney=""
FOR     i=lnlen TO 1 STEP -1
    IF i<>1
        lnnum=MOD(FLOOR(lnmoney/(10**(i-1))),10)
    ELSE
        lnnum=MOD(ROUND(lnmoney/(10**(i-1)),0),10)
    ENDIF
    lnremain=lnremain-lnnum*10**(i-1)
    IF lnnum<>0
        lcmoney=lcmoney+SUBSTR(lcstr2,lnnum*2+1,2)
        lcmoney=lcmoney+SUBSTR(lcstr1,(i-1)*2+1,2)
    ELSE
        IF  MOD(i,4)=3
            lcmoney=lcmoney+SUBSTR(lcstr1,(i-1)*2+1,2)
        ENDIF
        lcmoney=lcmoney+SUBSTR(lcstr2,lnnum*2+1,2)
    ENDIF
    lcmoney=STRTRAN(lcmoney,"零零","零")
    lcmoney=STRTRAN(lcmoney,"零零","零")
    lcmoney=STRTRAN(lcmoney,"零元","元")
    lcmoney=STRTRAN(lcmoney,"零万","万")
    lcmoney=STRTRAN(lcmoney,"零亿","亿")
    lcmoney=STRTRAN(lcmoney,"亿万","亿零")
    IF LIKE("*元零??角*",lcmoney)
        lcmoney=STRTRAN(lcmoney,"元零","元")
    ENDIF
    IF LIKE("*万零??仟*",lcmoney)
        lcmoney=STRTRAN(lcmoney,"万零","万")
    ENDIF
    IF LIKE("*亿零??仟*",lcmoney)
        lcmoney=STRTRAN(lcmoney,"亿零","亿")
    ENDIF

    IF i>1 AND i<4 AND lnremain=0 OR (i=1 AND lnnum=0)
        lcmoney=lcmoney+"整"
        lcmoney=STRTRAN(lcmoney,"零整","整")
        EXIT
    ENDIF
ENDFOR
IF RIGHT(lcmoney,2)=="零"
    lcmoney=LEFT(lcmoney,LEN(lcmoney)-2)
ENDIF
lcmoney=lcsign+lcmoney
SET DECIMAL TO lnolddecimal
RETURN lcmoney
ENDFUNC


6、
*----调用方式为----*
?UPPERRMB(10021.56)

FUNCTION    UPPERRMB
PARAMETER  RMB
PRIVATE  UNIT,  NUMBER,  I,  RETVAR
UNIT  =  '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟'
NUMBER  =  '零壹贰叁肆伍陆柒捌玖'
RMB  =  INT(RMB*100+0.5)
RETVAR  =  ''
DO WHILE  RMB>0
    RETVAR  =  SUBSTR(NUMBER,2*(MOD(RMB,10))+1,2)+LEFT(UNIT,2)+RETVAR
    RMB  =  INT(RMB/10)
    UNIT  =  SUBSTR(UNIT,3)
ENDDO
RETVAR  =  STRTRAN(RETVAR,'零仟','零')
RETVAR  =  STRTRAN(RETVAR,'零佰','零')
RETVAR  =  STRTRAN(RETVAR,'零拾','零')
RETVAR  =  STRTRAN(RETVAR,'零角','零')
DO WHILE  '零零'$RETVAR
    RETVAR  =  STRTRAN(RETVAR,'零零','零')
ENDDO
RETVAR  =  STRTRAN(RETVAR,'零亿','亿')
RETVAR  =  STRTRAN(RETVAR,'零万','万')
RETVAR  =  STRTRAN(RETVAR,'亿万','亿零')
RETVAR  =  STRTRAN(RETVAR,'零零','零')
RETVAR  =  STRTRAN(RETVAR,'零圆','圆')
RETVAR  =  STRTRAN(RETVAR,'零分','整')
RETVAR  =  IIF(LEN(RETVAR)=0,'零圆整',RETVAR)
RETURN  RETVAR


7、
*----调用方式为----*
?ntoc(10021.56)

FUNC ntoc
PARA num
LOCAL string,string1,string2
IF num<100000000
RETU ntoc2(num)
ENDIF
STRING=allt(str(num,20,2))
string1=right(string,11)
string2=substr(string,1,len(string)-11)
string1=ntoc2(val(string1))
string2=ntoc2(val(string2))
STRING=left(string2,len(string2)-4)+''''亿''''+string1
IF right(string,6)=''''零元正''''
STRING=substr(string,1,len(string)-6)+''''元正''''
ENDIF
RETU string


FUNC ntoc2
PARAMETERS NUM
PRIV NUM,CHAR,POSI,I,STR,TEMP,ii
DIMENSION CHAR(10),POSI(7)
**wait wind str(num,14,2)
CHAR(1) =''''壹''''
CHAR(2) =''''贰''''
CHAR(3) =''''叁''''
CHAR(4) =''''肆''''
CHAR(5) =''''伍''''
CHAR(6) =''''陆''''
CHAR(7) =''''柒''''
CHAR(8) =''''捌''''
CHAR(9) =''''玖''''
CHAR(10)=''''零''''
POSI(1) =''''分''''
POSI(2) =''''角''''
POSI(3) =''''元''''
POSI(4) =''''拾''''
POSI(5) =''''佰''''
POSI(6) =''''仟''''
POSI(7) =''''万''''
STR=''''''''
IF NUM>=100000000 &&一亿
RETURN ''''*********''''
ENDIF
NUM=NUM*100
I=1
ii=1
lasttemp=1
DO WHILE NUM>=1
NUM=NUM/10
TEMP=INT((NUM-INT(NUM))*10)
I=IIF(I=8,4,I)
IF temp#0 &&char(iif(temp=0,10,temp))#''''零''''
STR=CHAR(IIF(TEMP=0,10,TEMP))+POSI(I)+STR
ELSE
IF(i=3)
STR=''''元''''+str
ENDIF
IF (i=7)
STR=''''万''''+str
ENDIF
ENDIF
IF temp=0.and.i>1.and.lasttemp#temp.and.;
left(str,2)#''''元''''.and.left(str,2)#''''万''''
STR=''''零''''+str
ENDIF
I=I+1
ii=ii+1
lasttemp=temp
ENDDO
IF right(str,2)#''''分''''
STR=str+''''正''''
ENDIF
IF str=''''正''''
STR=''''零元正''''
ENDIF
RETURN STR