此博客为原创博客,都是个人工作经历所得,转载请注明出处

ABAP 数值转换大写

转自:http://www.dasunny.com/wordpress/sapnotes/2015113091.html
SAP标准的数值转换函数 SPELL_AMOUNT,
仅对整数部分进行了处理,小数部分未处理。
FUNCTION Z_RMBDX.
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 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.

 

posted @ 2017-03-28 11:00  Rainystuday  阅读(808)  评论(0编辑  收藏  举报