ABAP开发中遇到要用到英文货币大小写的转化问题,搜索了一下,没有,只好自己来做。
FUNCTION ZTRANSFORMNUM.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(NUM) TYPE VBRK-NETWR
*" EXPORTING
*" REFERENCE(NUMSTR) TYPE STRING
*"----------------------------------------------------------------------
DATA: numqb TYPE string,
numzs TYPE string,
numxs TYPE string,
numxsstr TYPE string,"小数部分对应的英文大写
numtemps TYPE string,
numtempc(1) TYPE C.
DATA numtab TYPE TABLE OF string WITH HEADER LINE.
DATA: numlen TYPE i,
colno TYPE i VALUE 0,
recordno TYPE i,
numdiv TYPE i,"以3除整个整数部分得到份数
nummod TYPE i."以3除整个整数部分得到余数
DATA splitsign(1) TYPE C VALUE '.'.
* 定义内表用于存放分开的数字和对应的英文大写
DATA: BEGIN OF t_numstr OCCURS 0,
colno TYPE I,"序号
num TYPE STRING,"数字
behnum TYPE STRING,"数字后面的英文信息,如Million,Thousand等
sumnum TYPE STRING,"合成英文信息
END OF t_numstr.
numqb = num.
SPLIT numqb AT splitsign INTO TABLE numtab.
*先把整个数字区分为整数和小数部分。
DATA: lc TYPE i VALUE 0.
LOOP AT numtab.
lc = lc + 1.
IF lc = 1.
numzs = numtab.
ELSE.
numxs = numtab.
ENDIF.
ENDLOOP.
*把整数部门分成3个数字一组的内表
DATA sep(1) TYPE c VALUE ','.
IF numzs NE '0'.
numlen = strlen( numzs ).
nummod = numlen MOD 3.
numdiv = numlen DIV 3.
IF nummod NE 0.
numtemps = numzs.
SHIFT numzs BY nummod PLACES CIRCULAR.
CONCATENATE numzs ',' INTO numzs.
* ELSE.
ENDIF.
DO numdiv TIMES.
SHIFT numzs BY 3 PLACES CIRCULAR.
CONCATENATE numzs ',' INTO numzs.
ENDDO.
CLEAR numtab.
SPLIT numzs AT sep INTO TABLE numtab.
*end把整数部门分成3个数字一组的内表
*获得内表记录数
DESCRIBE TABLE numtab LINES recordno.
*填充分开的数字和对应的英文大写的内表
LOOP AT numtab.
t_numstr-colno = recordno - colno.
t_numstr-num = numtab.
CASE t_numstr-colno.
WHEN 1.
t_numstr-behnum = ''.
WHEN 2.
t_numstr-behnum = 'THOUSAND'.
WHEN 3.
t_numstr-behnum = 'MILLION'.
WHEN 4.
t_numstr-behnum = 'BILLION'.
ENDCASE.
PERFORM TRANSBW USING t_numstr-num CHANGING t_numstr-sumnum.
IF t_numstr-behnum NE ''.
CONCATENATE t_numstr-sumnum t_numstr-behnum INTO t_numstr-sumnum SEPARATED BY SPACE.
ENDIF.
t_numstr-colno = colno + 1.
APPEND t_numstr TO t_numstr[].
colno = colno + 1.
ENDLOOP.
ENDIF.
LOOP AT t_numstr.
CONCATENATE numstr t_numstr-sumnum INTO numstr SEPARATED BY SPACE.
ENDLOOP.
CONCATENATE numstr 'DOLLARS' INTO numstr SEPARATED BY SPACE.
*begin转化小数部分
SEARCH numxs FOR '00'.
IF sy-subrc <> 0.
PERFORM TRANSSW USING numxs CHANGING numxsstr.
CONCATENATE numxsstr 'CENTS ONLY' INTO numxsstr SEPARATED BY SPACE.
ENDIF.
*end转化小数部分
CONCATENATE numstr numxsstr INTO numstr SEPARATED BY SPACE.
ENDFUNCTION.
*&---------------------------------------------------------------------*
*& Form TRANSBW
* 转化百位
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(HUN) text
* -->HUNSTR text
*----------------------------------------------------------------------*
FORM TRANSBW USING value(hun) CHANGING hunstr.
DATA len TYPE i.
DATA sw TYPE i.
DATA swstr TYPE STRING.
DATA hunstrtemp TYPE STRING.
DATA tempc(1) TYPE C.
len = strlen( hun ).
CASE len.
WHEN 1.
PERFORM TRANSGW USING hun CHANGING hunstr.
WHEN 2.
PERFORM TRANSSW USING hun CHANGING hunstr.
WHEN 3.
tempc = hun.
sw = hun MOD 100.
PERFORM TRANSGW USING tempc CHANGING hunstr.
CONCATENATE hunstr 'HUNDRED' INTO hunstr SEPARATED BY SPACE.
IF sw >= 10.
PERFORM TRANSSW USING sw CHANGING swstr.
ELSE.
PERFORM TRANSGW USING sw CHANGING swstr.
ENDIF.
IF swstr <> ''.
CONCATENATE hunstr 'AND' swstr INTO hunstr SEPARATED BY SPACE.
ENDIF.
ENDCASE.
ENDFORM. "TRANSBW
*转化个位
FORM TRANSGW USING value(x) CHANGING dxx.
CASE x.
WHEN '0'.
dxx = ''.
WHEN '1'.
dxx = 'ONE'.
WHEN '2'.
dxx = 'TWO'.
WHEN '3'.
dxx = 'THREE'.
WHEN '4'.
dxx = 'FOUR'.
WHEN '5'.
dxx = 'FIVE'.
WHEN '6'.
dxx = 'SIX'.
WHEN '7'.
dxx = 'SEVEN'.
WHEN '8'.
dxx = 'EIGHT'.
WHEN '9'.
dxx = 'NINE'.
ENDCASE.
ENDFORM. "TRANSGW
* 转化十位
FORM TRANSSW USING value(x) CHANGING dxx.
DATA tempc TYPE i.
DATA tengw TYPE i.
DATA hunstrtemp TYPE STRING.
CASE x.
WHEN 10.
dxx = 'TEN'.
WHEN 11.
dxx = 'ELEVEN'.
WHEN 12.
dxx = 'TWELVE'.
WHEN 13.
dxx = 'THIRTEEN'.
WHEN 14.
dxx = 'FOURTEEN'.
WHEN 15.
dxx = 'FIFTEEN'.
WHEN 16.
dxx = 'SIXTEEN'.
WHEN 17.
dxx = 'SEVENTEEN'.
WHEN 18.
dxx = 'EIGHTEEN'.
WHEN 19.
dxx = 'NINETEEN'.
WHEN OTHERS.
tempc = x DIV 10.
CASE tempc.
WHEN 2.
dxx = 'TWENTY'.
WHEN 3.
dxx = 'THIRTY'.
WHEN 4.
dxx = 'FORTY'.
WHEN 5.
dxx = 'FIFTY'.
WHEN 6.
dxx = 'SIXTY'.
WHEN 7.
dxx = 'SEVENTY'.
WHEN 8.
dxx = 'EIGHTY'.
WHEN 9.
dxx = 'NINETY'.
ENDCASE.
tengw = x MOD 10.
IF tengw > 0.
PERFORM TRANSGW USING tengw CHANGING hunstrtemp.
CONCATENATE dxx hunstrtemp INTO dxx SEPARATED BY SPACE.
ENDIF.
ENDCASE.
ENDFORM. "TRANSSW
这篇博客介绍了一段用ABAP编写的代码,用于将英文数字转化为货币格式的大写表示,包括整数和小数部分的处理,以及对应的英文单词如'HUNDRED', 'THOUSAND', 'MILLION'等。"
81869610,7678373,BP神经网络详解:从理论到Python实现,"['神经网络', '机器学习', '深度学习', '数据挖掘', '编程实现']

301

被折叠的 条评论
为什么被折叠?



