现在的位置: 首页 > 综合 > 正文

千分位

2013年03月25日 ⁄ 综合 ⁄ 共 1956字 ⁄ 字号 评论关闭

在这个问题上我很是纠结了一番,最后的结果却叫我哭笑不得,一个字,囧。

解决这个问题,首先我将金额赋给字符型,结果千分位没了,可是只用金额型,负号又不能前提了,郁闷,没办法,只好另辟奚径了。
1、用WRITE...TO...将金额型写给C型,保留千分位,再使用下面这个函数就OK了
  IF is_result-amount 0.
      CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
        CHANGING
          value is_result-amount.
    ENDIF.
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,
  TYPE i,
  zcstr(30) TYPE c,
  zcstr2(30) TYPE c,
  zctemp(3) TYPE c,
  zflag(1) TYPE VALUE '.',
  zflag2 TYPE 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.
        zclen 3.
        zctemp zcstr+n(3).
        IF NOT zcstr2 IS INITIAL.
     

抱歉!评论已关闭.