FUNCTION ZFI_TOBIG.
*"----------------------------------------------------------------------
*"*"本地接口:
*" IMPORTING
*" REFERENCE(I_MONEY) TYPE WRBTR
*" EXPORTING
*" REFERENCE(E_MONEY) TYPE CHAR30
*"----------------------------------------------------------------------
DATA: l_unicode TYPE c LENGTH 1,
l_money_str TYPE c LENGTH 23,
cword TYPE c LENGTH 2,
weight TYPE c LENGTH 2,
units TYPE c LENGTH 30 VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万',
digts TYPE c LENGTH 20 VALUE '零壹贰叁肆伍陆柒捌玖'.
DATA: l_position TYPE i,
units_off TYPE i,
curnt_off TYPE i,
l_four TYPE i,
l_step TYPE i.
DATA: lastd TYPE n,
curntd TYPE n.
DATA: lv_flag TYPE c. "金额是否为负 标识
* 判断系统是否是unicode,确定步长
CALL FUNCTION 'TR_GET_IS_UNICODE_SYSTEM'
IMPORTING
ev_is_unicode_system = l_unicode.
IF l_unicode = 'X'.
l_step = 1.
ELSE.
l_step = 2.
ENDIF.
* 为0单独处理
IF i_money = 0.
e_money = '零'.
EXIT.
ENDIF.
* 借用系统函数,在此检查金额的合法性
l_money_str = i_money.
* CALL FUNCTION 'FKK_AMOUNT_CHECK_AND_CONVERT'
* EXPORTING
* i_amount = l_money_str
* i_waers = 'CNY'
* EXCEPTIONS
* invalid_input_format = 1
* OTHERS = 2.
* IF sy-subrc <> 0.
* RAISE wrong_money.
* ENDIF.
REPLACE ALL OCCURRENCES OF REGEX '\-' IN l_money_str WITH ''. "删除 - 符号
IF sy-subrc = 0. "如果为负数
lv_flag = 'X'.
ENDIF.
* 将小数点去掉
IF l_money_str CS '.'.
REPLACE FIRST OCCURRENCE OF '.' IN l_money_str
WITH space IN CHARACTER MODE.
ENDIF.
CONDENSE l_money_str NO-GAPS.
* 构造大写文本
lastd = 0.
curnt_off = strlen( l_money_str ) - 1.
WHILE curnt_off >= 0.
curntd = l_money_str+curnt_off(1).
l_position = curntd * l_step.
cword = digts+l_position(l_step).
weight = units+units_off(l_step).
l_position = units_off / l_step.
IF curntd = 0. "Current digit is 0
IF l_position = 2 OR l_position = 6 OR l_position = 10.
CLEAR:cword.
IF curnt_off = 0.
CLEAR:weight.
ENDIF.
l_four = curnt_off - 3.
IF l_four < 0.
l_four = 0.
ENDIF.
IF l_position > 2 and ( l_money_str+l_four(3) = '000' OR l_money_str+l_four(3) = '00' OR l_money_str+l_four(3) = '0' ).
CLEAR:weight.
ENDIF.
ELSEIF lastd = 0.
CLEAR:cword,weight.
ELSE.
CLEAR:weight.
ENDIF.
ENDIF.
CONCATENATE cword weight e_money INTO e_money.
lastd = curntd.
curnt_off = curnt_off - 1.
units_off = units_off + l_step.
ENDWHILE.
* 处理前缀(零)和后缀(整)
IF e_money NS '分'.
CONCATENATE e_money '整' INTO e_money.
ELSE.
cword = e_money+0(l_step).
IF cword = '零'.
SHIFT e_money BY l_step PLACES.
ENDIF.
ENDIF.
* 大小写转换新增负数
IF lv_flag = 'X'.
CONCATENATE '负' E_MONEY INTO E_MONEY.
CLEAR lv_flag.
ENDIF.
ENDFUNCTION.
带负数小数点:
小数点:
整数: