1.定义入参,出参数
2.代码
FUNCTION zfun_convert_money.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" VALUE(I_INPUT) TYPE WERTV12
*" EXPORTING
*" VALUE(E_OUTPUT) TYPE STRING
*"----------------------------------------------------------------------
DATA: i_value TYPE char100, "入参
e_value TYPE char255, "出参
v_intege TYPE c LENGTH 23, "整数部分 最大23位
v_decimal TYPE c LENGTH 2. "小数部分 默认2位
DATA: text_tab TYPE TABLE OF char_4,
wa_text_tab TYPE char_4,
length TYPE i.
DATA: v_lenth TYPE i, "整数部分长度
v_cache TYPE c LENGTH 1. "缓存
DATA: lv_flag TYPE c. "金额是否为负 标识
"输入
i_value = i_input.
REPLACE ALL OCCURRENCES OF REGEX '\-' IN i_value WITH ''. "删除 - 符号
IF sy-subrc = 0. "如果为负数
lv_flag = 'X'.
ENDIF.
SHIFT i_value LEFT DELETING LEADING '0'. "删除前导0
CONDENSE i_value NO-GAPS. "删除空格
"拆分金额的整数小数
SPLIT i_value AT '.' INTO v_intege v_decimal.
PERFORM frm_string_reverse CHANGING v_intege. "翻转intege sting
CALL FUNCTION 'SCMS_STRING_TO_FTEXT' "四个一拆分
EXPORTING
text = |{ v_intege }|
IMPORTING
length = length
TABLES
ftext_tab = text_tab.
LOOP AT text_tab INTO wa_text_tab.
CASE sy-tabix.
WHEN 1.
CONCATENATE e_value '元' INTO e_value.
WHEN 2.
IF wa_text_tab <> '0000'.
CONCATENATE '万' e_value INTO e_value.
ENDIF.
WHEN 3.
IF wa_text_tab <> '0000'.
CONCATENATE '亿' e_value INTO e_value.
ENDIF.
WHEN 4.
IF wa_text_tab <> '0000'.
CONCATENATE '兆' e_value INTO e_value.
ENDIF.
WHEN 5.
IF wa_text_tab <> '0000'.
CONCATENATE '万兆' e_value INTO e_value.
ENDIF.
WHEN 6.
IF wa_text_tab <> '0000'.
CONCATENATE '京' e_value INTO e_value. "兆后面就是京
ENDIF.
ENDCASE.
CLEAR: v_lenth.
DO strlen( wa_text_tab ) TIMES.
v_cache = wa_text_tab+v_lenth(1).
IF v_cache <> 0.
CASE v_lenth.
WHEN 0.
CONCATENATE v_cache e_value INTO e_value.
WHEN 1.
CONCATENATE v_cache '拾' e_value INTO e_value.
WHEN 2.
CONCATENATE v_cache '佰' e_value INTO e_value.
WHEN 3.
CONCATENATE v_cache '仟' e_value INTO e_value.
ENDCASE.
ELSE.
CONCATENATE v_cache e_value INTO e_value.
ENDIF.
v_lenth = v_lenth + 1.
ENDDO.
ENDLOOP.
IF e_value <> '0元'.
REPLACE ALL OCCURRENCES OF REGEX '0+京' IN e_value WITH '京0'.
REPLACE ALL OCCURRENCES OF REGEX '0+万兆' IN e_value WITH '万兆0'.
REPLACE ALL OCCURRENCES OF REGEX '0+兆' IN e_value WITH '兆0'.
REPLACE ALL OCCURRENCES OF REGEX '0+亿' IN e_value WITH '亿0'.
REPLACE ALL OCCURRENCES OF REGEX '0+万' IN e_value WITH '万0'.
REPLACE ALL OCCURRENCES OF REGEX '0+元' IN e_value WITH '元'. "排除掉 100000.01 显示 壹拾万零元零壹分 的情况
ENDIF.
"处理小数部分
IF v_decimal = '00'.
CONCATENATE e_value '整' INTO e_value.
ELSE.
IF v_decimal+1(1) <> 0.
IF v_decimal+0(1) <> 0.
CONCATENATE e_value v_decimal+0(1) '角' INTO e_value.
ELSE.
CONCATENATE e_value v_decimal+0(1) INTO e_value.
ENDIF.
CONCATENATE e_value v_decimal+1(1) '分' INTO e_value.
ELSE.
CONCATENATE e_value v_decimal+0(1) '角' INTO e_value.
ENDIF.
ENDIF.
" 替换e_value中的数字 正则表达式
REPLACE ALL OCCURRENCES OF REGEX '0+' IN e_value WITH '零'. "多个零时,只输出一个零
REPLACE ALL OCCURRENCES OF REGEX '1{1}' IN e_value WITH '壹'.
REPLACE ALL OCCURRENCES OF REGEX '2{1}' IN e_value WITH '贰'.
REPLACE ALL OCCURRENCES OF REGEX '3{1}' IN e_value WITH '叁'.
REPLACE ALL OCCURRENCES OF REGEX '4{1}' IN e_value WITH '肆'.
REPLACE ALL OCCURRENCES OF REGEX '5{1}' IN e_value WITH '伍'.
REPLACE ALL OCCURRENCES OF REGEX '6{1}' IN e_value WITH '陆'.
REPLACE ALL OCCURRENCES OF REGEX '7{1}' IN e_value WITH '柒'.
REPLACE ALL OCCURRENCES OF REGEX '8{1}' IN e_value WITH '捌'.
REPLACE ALL OCCURRENCES OF REGEX '9{1}' IN e_value WITH '玖'.
IF lv_flag = 'X'.
CONCATENATE '负' e_value INTO e_value.
CLEAR lv_flag.
ENDIF.
"输出
e_output = e_value.
ENDFUNCTION.
3.效果
- 正数
- 负数