&---------------------------------------------------------------------
*& Report ZTESTXUE32 ABAP 将数字转换成中文、英文
&---------------------------------------------------------------------
*& 测试代码,仅供参考。
&---------------------------------------------------------------------
REPORT ztestxue32 NO STANDARD PAGE HEADING.
&=====================================================================&
*& 声明数据库表
&=====================================================================&
TABLES:mara.
&=====================================================================&
*& 定义结构类型
&=====================================================================&
*& 定义全局变量、内表与工作区
&=====================================================================&
DATA:g_money(100) TYPE c.
DATA:money_str(33).
DATA:i TYPE i.
DATA:units_off TYPE i,
curnt_off TYPE i.
DATA:lastd TYPE n,curntd TYPE n.
DATA:cword(2),weight(2).
DATA:units(30) VALUE ‘分角元拾佰仟万拾佰仟亿拾佰仟万’,
digts(20) VALUE ‘零壹贰叁肆伍陆柒捌玖’.
DATA:g_total_value TYPE string.
&=====================================================================&
*& 定义宏
&=====================================================================&
&=====================================================================&
*& SELECT-SCREEN 选择屏幕
&=====================================================================&
SELECTION-SCREEN BEGIN OF BLOCK xavery WITH FRAME TITLE TEXT-001.
PARAMETERS: p_dmbtr TYPE bf_dmbtr OBLIGATORY DEFAULT ‘1’.
SELECTION-SCREEN END OF BLOCK xavery.
*单选按钮
SELECTION-SCREEN BEGIN OF BLOCK xue WITH FRAME TITLE TEXT-002.
PARAMETERS:p_rd1 RADIOBUTTON GROUP asia USER-COMMAND dis DEFAULT ‘X’, "功能 "中文
p_rd2 RADIOBUTTON GROUP asia. "配置 "英文
SELECTION-SCREEN END OF BLOCK xue.
&=====================================================================&
*& 执行程序事件
&=====================================================================&
INITIALIZATION.
START-OF-SELECTION.
IF p_rd1 = ‘X’.
PERFORM sub_process_cond.
PERFORM sub_unicode_version.
ELSEIF p_rd2 = ‘X’.
PERFORM amount_to_word USING p_dmbtr "Amount
‘CNY’ "Currency
CHANGING g_total_value. "string for number description
ENDIF.
END-OF-SELECTION.
PERFORM sub_write_to_screen.
&---------------------------------------------------------------------
*& Form SUB_UNICODE_VERSION
&---------------------------------------------------------------------
*& 中文。
&----------------------------------------------------------------------
FORM sub_unicode_version .
IF p_dmbtr = 0.
g_money = ‘零’.
EXIT.
ENDIF.
money_str = p_dmbtr.
CONDENSE money_str NO-GAPS.
IF money_str CN '0123456789. '.
RAISE wrong_money.
ENDIF.
IF money_str CS ‘.’.
i = sy-fdpos + 1.
money_str+sy-fdpos = money_str+i.
ENDIF.
CONDENSE money_str NO-GAPS.
lastd = 0.
curnt_off = strlen( money_str ) - 1.
WHILE curnt_off >= 0.
curntd = money_str+curnt_off(1).
i = curntd.
cword = digts+i(1).
weight = units+units_off(1).
i = units_off / 1.
IF curntd = 0.
IF i = 2 OR i = 6 OR i = 10.
CLEAR:cword.
IF curnt_off = 0.
CLEAR:weight.
ENDIF.
ELSEIF lastd = 0.
CLEAR:cword,weight.
ELSE.
CLEAR:weight.
ENDIF.
ENDIF.
CONCATENATE cword weight g_money INTO g_money.
lastd = curntd.
SUBTRACT 1 FROM curnt_off.
ADD 1 TO units_off.
ENDWHILE.
IF g_money NS ‘分’.
CONCATENATE g_money ‘整’ INTO g_money.
ELSE.
cword = g_money.
IF cword = ‘零’.
SHIFT g_money BY 1 PLACES.
ENDIF.
ENDIF.
g_money = ‘中文’ && ‘:’ && g_money.
ENDFORM. " SUB_UNICODE_VERSION
&---------------------------------------------------------------------
*& Form SUB_WRITE_TO_SCREEN
&---------------------------------------------------------------------
FORM sub_write_to_screen .
IF p_rd1 = ‘X’.
WRITE g_money.
ELSEIF p_rd2 = ‘X’.
WRITE g_total_value.
ENDIF.
ENDFORM. " SUB_WRITE_TO_SCREEN
&---------------------------------------------------------------------
*& Form amount_to_word
&---------------------------------------------------------------------
*& translate number to English capital character
&----------------------------------------------------------------------
*& -->L_AMT 金额
*& -->L_WAERS 货币
*& -->SAYWORDS 返回的英文大写描述
&---------------------------------------------------------------------
FORM amount_to_word USING l_amt TYPE bf_dmbtr
l_waers TYPE eban-waers
CHANGING saywords TYPE string.
DATA: lw_spell LIKE spell,
lv_text TYPE ltext,
lv_cent TYPE spell.
SELECT SINGLE ktext INTO lv_text
FROM tcurt
WHERE spras = ‘E’ AND
waers = l_waers.
TRANSLATE lv_text TO UPPER CASE.
CALL FUNCTION ‘SPELL_AMOUNT’
EXPORTING
amount = l_amt
currency = l_waers
filler = ‘’
language = ‘E’
IMPORTING
in_words = lw_spell.
lw_spell-decimal = lw_spell-decimal / 10.
IF NOT lw_spell-decimal IS INITIAL.
CALL FUNCTION ‘SPELL_AMOUNT’
EXPORTING
amount = lw_spell-decimal
filler = ‘’
language = ‘E’
IMPORTING
in_words = lv_cent.
ENDIF.
CLEAR saywords.
IF NOT lv_cent-word IS INITIAL.
CONCATENATE lw_spell-word lv_cent-word
INTO saywords SEPARATED BY ‘,’.
ELSE.
saywords = ‘英文’ && ‘:’ && lw_spell-word .
ENDIF.
ENDFORM. "amount_to_word