ABAP 将数字转换成中文、英文

&---------------------------------------------------------------------
*& 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值