FUNCTION ZTYF_JEZH.
*"--------------------------------------------------------------------
*"*"本地接口:
*" 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.
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.
12-09
492
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
06-21
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交