大小写金额转换
*大小写金额转换
DATA: L_DXSTR(60). "大写金额
DATA: HJ_JFJE LIKE BSEG-WRBTR. "小写金额
HJ_JFJE = '234687.88'.
PERFORM XX_CHANGE_DX USING HJ_JFJE CHANGING L_DXSTR.
*
FORM XX_CHANGE_DX using val
changing dxstr. DATA: ZS(15).
DATA: XS(15).
DATA: STR(15).
DATA: LEN TYPE I VALUE 0.
DATA: CIS TYPE I VALUE 0.
DATA: SS(2).
DATA: RR(1).
DATA: STRR(15).
DATA: change(30) TYPE C VALUE '1壹2贰3叁4肆5伍6陆7柒8捌9玖0零'.
CLEAR DXSTR.
MOVE VAL TO STR.
SHIFT STR LEFT DELETING LEADING SPACE.
SPLIT STR AT '.' INTO ZS XS.
LEN = STRLEN( ZS ).
CLEAR STRR.
CIS = LEN - 1.
DO LEN TIMES.
MOVE ZS+CIS(1) TO RR.
CONCATENATE STRR RR INTO STRR.
CIS = CIS - 1.
ENDDO.
CIS = 0.
DO LEN TIMES.
MOVE STRR+CIS(1) TO SS.
TRANSLATE SS USING change.
CASE CIS.
WHEN 0. CONCATENATE SS '元' INTO DXSTR.
WHEN 1. CONCATENATE SS '拾' DXSTR INTO DXSTR.
WHEN 2. CONCATENATE SS '佰' DXSTR INTO DXSTR.
WHEN 3. CONCATENATE SS '仟' DXSTR INTO DXSTR.
WHEN 4. CONCATENATE SS '万' DXSTR INTO DXSTR.
WHEN 5. CONCATENATE SS '拾' DXSTR INTO DXSTR.
WHEN 6. CONCATENATE SS '佰' DXSTR INTO DXSTR.
WHEN 7. CONCATENATE SS '仟' DXSTR INTO DXSTR.
WHEN 8. CONCATENATE SS '亿' DXSTR INTO DXSTR.
WHEN 9. CONCATENATE SS '拾' DXSTR INTO DXSTR.
WHEN 10. CONCATENATE SS '百' DXSTR INTO DXSTR.
WHEN 11. CONCATENATE SS '仟' DXSTR INTO DXSTR.
ENDCASE.
CIS = CIS + 1.
ENDDO.
CLEAR SS.
IF XS <> '00'.
MOVE XS+0(1) TO SS. TRANSLATE SS USING change.
CONCATENATE DXSTR SS '角' INTO DXSTR.
MOVE XS+1(1) TO SS. TRANSLATE SS USING change.
CONCATENATE DXSTR SS '分' INTO DXSTR.
ENDIF.
CONCATENATE DXSTR '整' INTO DXSTR.
ENDFORM. " XX_CHANGE_DX
我的程序写的比较粗糙,转换方法比较笨。大家将就着看,我不高兴写注释了。如果有什么好的建议或方法,请回复,彼此交流。
FUNCTION z_xjq_rmbdx.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(RMBXX) LIKE BSEG-WRBTR *" CHANGING
*" REFERENCE(RMBDX1) TYPE C
*"----------------------------------------------------------------------
DATA: BEGIN OF rmb,
by TYPE c,
sy TYPE c,
y TYPE c,
qw TYPE c,
bw TYPE c,
sw TYPE c,
w TYPE c,
q TYPE c,
b TYPE c,
s TYPE c,
g TYPE c,
d TYPE c,
j TYPE c,
f TYPE c,
n TYPE c,
END OF rmb.
DATA: BEGIN OF rmbdx,
by(2) TYPE c,
by1(4) TYPE c,
sy(2) TYPE c,
sy1(4) TYPE c,
y(2) TYPE c,
y1(2) TYPE c,
qw(2) TYPE c,
qw1(4) TYPE c,
bw(2) TYPE c,
bw1(4) TYPE c,
sw(2) TYPE c,
sw1(4) TYPE c,
w(2) TYPE c,
w1(4) TYPE c,
q(2) TYPE c,
q1(4) TYPE c,
b(2) TYPE c,
b1(4) TYPE c,
s(2) TYPE c,
s1(4) TYPE c,
g(2) TYPE c,
d(2) TYPE c,
j(2) TYPE c,
j1(2) TYPE c,
f(2) TYPE c,
f1(2) TYPE c,
z(2) TYPE c,
END OF rmbdx.
DATA: y(1) TYPE c.
rmb = rmbxx.
IF NOT ( rmb-by IS INITIAL ) AND rmb-by NE '0'.
PERFORM dx USING rmb-by CHANGING rmbdx-by.
y = 'X'.
IF rmb-by NE '0'.
IF rmb-sy EQ '0' AND rmb-y EQ '0'.
rmbdx-by1 = '佰亿'.
ELSE.
rmbdx-by1 = '佰'.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-sy IS INITIAL ).
IF rmb-sy NE '0' OR rmb-y NE '0'.
PERFORM dx USING rmb-sy CHANGING rmbdx-sy.
y = 'X'.
IF rmb-sy NE '0'.
IF rmb-y EQ '0'.
rmbdx-sy1 = '拾亿'.
ELSE.
rmbdx-sy1 = '拾'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-y IS INITIAL ).
IF rmb-y NE '0' OR rmb-qw NE '0'.
PERFORM dx USING rmb-y CHANGING rmbdx-y.
y = 'X'.
IF rmb-y NE '0'.
rmbdx-y1 = '亿'.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-qw IS INITIAL ).
IF rmb-qw NE '0' OR rmb-bw NE '0'.
PERFORM dx USING rmb-qw CHANGING rmbdx-qw.
y = 'X'.
IF rmb-qw NE '0'.
IF rmb-bw EQ '0' AND rmb-sw EQ '0' AND rmb-w EQ '0'.
rmbdx-qw1 = '仟万'.
ELSE.
rmbdx-qw1 = '仟'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-bw IS INITIAL ).
IF rmb-bw NE '0' OR rmb-sw NE '0'.
PERFORM dx USING rmb-bw CHANGING rmbdx-bw.
y = 'X'.
IF rmb-bw NE '0'.
IF rmb-sw EQ '0' AND rmb-w EQ '0'.
rmbdx-bw1 = '佰万'.
ELSE.
rmbdx-bw1 = '佰'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-sw IS INITIAL ).
IF rmb-sw NE'0' OR rmb-w NE '0'.
PERFORM dx USING rmb-sw CHANGING rmbdx-sw.
y = 'X'.
IF rmb-sw NE '0'.
IF rmb-w EQ '0'.
rmbdx-sw1 = '拾万'.
ELSE.
rmbdx-sw1 = '拾'.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-w IS INITIAL ).
IF rmb-w NE '0' OR rmb-q NE '0'.
PERFORM dx USING rmb-w CHANGING rmbdx-w.
y = 'X'.
IF rmb-w NE '0'.
rmbdx-w1 = '万'.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-q IS INITIAL ).
IF rmb-q NE '0' OR rmb-b NE '0'.
PERFORM dx USING rmb-q CHANGING rmbdx-q.
y = 'X'.
IF rmb-q NE '0'.
rmbdx-q1 = '仟'.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-b IS INITIAL ).
IF rmb-b NE '0' OR rmb-s NE '0'.
PERFORM dx USING rmb-b CHANGING rmbdx-b.
y = 'X'.
IF rmb-b NE '0'.
rmbdx-b1 = '佰'.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-s IS INITIAL ).
IF rmb-s NE'0' OR rmb-g NE '0'.
PERFORM dx USING rmb-s CHANGING rmbdx-s.
y = 'X'.
IF rmb-s NE '0'.
rmbdx-s1 = '拾'.
ENDIF.
ENDIF.
ENDIF.
IF NOT ( rmb-g IS INITIAL ) AND rmb-g NE '0'.
PERFORM dx USING rmb-g CHANGING rmbdx-g.
y = 'X'.
ENDIF.
IF y EQ 'X'.
rmbdx-d = '圆'.
ENDIF.
IF NOT ( rmb-j IS INITIAL ) AND rmb-j NE '0'.
PERFORM dx USING rmb-j CHANGING rmbdx-j.
rmbdx-j1 = '角'.
ENDIF.
IF NOT ( rmb-f IS INITIAL ) AND rmb-f NE '0'.
PERFORM dx USING rmb-f CHANGING rmbdx-f.
rmbdx-f1 = '分'.
ELSE.
rmbdx-z = '整'.
ENDIF.
CONDENSE rmbdx NO-GAPS.
IF rmbxx = 0.
CLEAR rmbdx.
ENDIF.
rmbdx1 = rmbdx.
CLEAR y.
ENDFUNCTION.
*---------------------------------------------------------------------*
* FORM dx *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> VALUE(X) *
* --> DXX *
*---------------------------------------------------------------------*
FORM dx USING value(x) CHANGING dxx.
CASE x.
WHEN '0'.
dxx = '零'.
WHEN '1'.
dxx = '壹'.
WHEN '2'.
dxx = '贰'.
WHEN '3'.
dxx = '叁'.
WHEN '4'.
dxx = '肆'.
WHEN '5'.
dxx = '伍'.
WHEN '6'.
dxx = '陆'.
WHEN '7'.
dxx = '柒'.
WHEN '8'.
dxx = '捌'.
WHEN '9'.
dxx = '玖'.
ENDCASE.
ENDFORM.