千分位
来源:互联网 发布:淘宝装修网站源码 编辑:程序博客网 时间:2024/04/27 13:24
在这个问题上我很是纠结了一番,最后的结果却叫我哭笑不得,一个字,囧。 IF is_result-amount < 0.
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = is_result-amount.
ENDIF.
解决这个问题,首先我将金额赋给字符型,结果千分位没了,可是只用金额型,负号又不能前提了,郁闷,没办法,只好另辟奚径了。
1、用WRITE...TO...将金额型写给C型,保留千分位,再使用下面这个函数就OK了
2、起先我是遇到了使用WRITE...TO...语法一直报错的问题,很是纠结了一会儿,没招儿,只好另觅他法,也是先将金额型赋给C型,然后将负号前提,此时丢失千分位,下面是关键的一步了,写一个FORM,强制给字段加上千分位符号,说白了,就是对字符串的操作,拆分整数和小数部分,整数部分三位一加逗号,最后再和小数部分拼起来,FORM如下:
*&---------------------------------------------------------------------*
*& Form NUMTOSTR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE text
* -->(ZNUM) text
* -->VALUE text
* -->(ZSTR) text
*----------------------------------------------------------------------*
FORM numtostr CHANGING p_is_result_amount
p_is_result_amount_h
p_is_result_total
p_is_result_total_h.
DATA : zclen TYPE i,
n TYPE i,
zcstr(30) TYPE c,
zcstr2(30) TYPE c,
zctemp(3) TYPE c,
zflag(1) TYPE c VALUE '.',
zflag2 TYPE i VALUE 0,
zcdec(30) TYPE c, "记录小数部分.
znum(30),
znum_h(30),
ztotal(30),
ztotal_h(30).
"zstr = ''.
znum = is_result-amount.
znum_h = is_result-amount_h.
ztotal = is_result-total.
ztotal_h = is_result-total_h.
CLEAR: is_result-amount,is_result-amount_h,is_result-total,is_result-total_h.
*---------------------------------------------------------------------------------------------*1
IF znum <> 0.
IF znum <= -1000.
zflag2 = 1.
znum = znum * ( -1 ).
ENDIF.
IF znum >= 1000.
zcstr = znum.
*压缩字符串,去除前面的空格。
CONDENSE zcstr NO-GAPS.
*分离整数与小数,好单独处理整数。
SPLIT zcstr AT zflag INTO zcstr zcdec.
zclen = strlen( zcstr ).
*在循环中从右面在每三位的前面加上一个逗号。
WHILE zclen > 3.
n = zclen - 3.
zctemp = zcstr+n(3).
IF NOT zcstr2 IS INITIAL.
*&
*&---------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
*
*
*
*
*----------------------------------------------------------------------*
FORM
*---------------------------------------------------------------------------------------------*1
*
*
*