1个回答
展开全部
没有特别好的方法,特别是既要有千分位又要把符号提前的情况,不自己动手的话基本无解。
下面的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.
CONCATENATE zctemp zcstr2 INTO zcstr2 SEPARATED BY ','.
ELSE.
zcstr2 = zctemp.
ENDIF.
zclen = zclen - 3.
ENDWHILE.
* 将不剩下的不足三位数加到前面
CONCATENATE zcstr+0(zclen) zcstr2 INTO zcstr2 SEPARATED BY ','.
IF zflag2 = 1.
CONCATENATE '-' zcstr2 INTO zcstr2.
ENDIF.
CLEAR zcstr.
* 将处理过的整数与小数连接起来。
IF strlen( zcdec ) > 1.
CONCATENATE zcstr2 zcdec INTO zcstr SEPARATED BY zflag.
ELSE.
CONCATENATE zcdec '00' INTO zcdec.
CONCATENATE zcstr2 zcdec INTO zcstr SEPARATED BY zflag.
ENDIF.
* 将值返回
is_result-amount = zcstr.
ELSE.
is_result-amount = znum.
ENDIF.
ENDIF.
CLEAR: zflag2,zcstr,zcdec,zclen,zctemp,zcstr2,n.
ENDFORM
追问
如果我输出的这个值是C类型,没有千分位,
我是否可以定义一个P类型,然后WRITE 它TO这个P类型的值。
最后输出P类型这个值?
追答
可以,但是不稳定,我遇见过几次出错的情况
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询