ABAP 负号 提前
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
????????CHANGING
??????????VALUE = gt_table-column5.
問MK了下,告訴我用write to語句把負數取絕對值,然后把數字型寫入字符型可以保留千位符,再判斷正負數,在輸出的時候添上負號。在FORM里我就是這樣改的了,很方便。
Form asset_front_minus changing value1.
?? value2 = abs( value1 ).
write value2 to string1.
???condense string1.
???if value1 < 0.
???write: '-', string1 LEFT-JUSTIFIED NO-GAP NO-ZERO.
???else.
???write: string1 LEFT-JUSTIFIED NO-GAP NO-ZERO.
???endif.
endform.
FR告訴我手動把字符型加千位符的,取整,判斷長度,除3以后循環mask"___,"格式,分割,再處理頭3位,覺得有點頭暈,麻煩啊。不過真有強人這么做,下面就是了,手動把字符型加千位符號。
FORM NUMTOSTR USING VALUE(ZNUM) CHANGING VALUE(ZSTR).
DATA : ZCLEN TYPE I,
N TYPE I,
ZCSTR(20) TYPE C,
ZCSTR2(20) TYPE C,
ZCTEMP(3) TYPE C,
ZFLAG(1) TYPE C VALUE '.',
ZFLAG2 TYPE I VALUE 0,
ZCDEC(20) TYPE C. "記錄小數部分.
ZSTR = ''.
CHECK ZNUM <> 0.
IF ZNUM <= -1000.
ZFLAG2 = 1.
ZNUM = ABS( ZNUM ).
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.
* 將處理過的整數與小數連接起來。
CONCATENATE ZCSTR2 ZCDEC INTO ZCSTR SEPARATED BY ZFLAG.
* 將值返回
ZSTR = ZCSTR.
ELSE.
ZSTR = ZNUM.
ENDIF.
ENDFORM.
************************************************************************
我根據上面提供的函數進行了測試,出現了一些BUG,我對他進行了完善和修改。
修改如下:
FORM NUMTOSTR USING VALUE(ZNUM) CHANGING VALUE(ZSTR).
DATA : ZCLEN TYPE I,
???????? ZCLEN2 TYPE I, " 記錄數據長度.
???????? N TYPE I,
???????? ZCSTR(20) TYPE C,
???????? ZCSTR2(20) TYPE C,
???????? ZCTEMP(3) TYPE C,
???????? ZFLAG(1) TYPE C VALUE '.',
???????? ZFLAG2 TYPE I VALUE 0,
???????? ZCDEC(20) TYPE C.?? "記錄小數部分.
ZSTR = ''.
CHECK ZNUM <> 0.
IF ZNUM < 0.
?? ZFLAG2 = 1.
?? ZNUM = ABS( ZNUM ).
ENDIF.
IF ZNUM >= 0.
?? ZCSTR = ZNUM.
* 壓縮字符串,去除前面的空格。
?? CONDENSE ZCSTR NO-GAPS.
* 分離整數與小數,好單獨處理整數。
?? SPLIT ZCSTR AT ZFLAG INTO ZCSTR ZCDEC.
?? ZCLEN = STRLEN( ZCSTR ).
?? ZCLEN2 = ZCLEN.
* 在循環中從右面在每三位的前面加上一個逗號。
?? 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.
* 將不剩下的不足三位數加到前面
?? IF ZCLEN2 > 3 .
???? CONCATENATE ZCSTR+0(ZCLEN) ZCSTR2 INTO ZCSTR2 SEPARATED BY ','.
?? ELSE.
???? ZCSTR2 = ZCSTR+0(ZCLEN).
?? ENDIF.
?? IF ZFLAG2 = 1.
???? CONCATENATE '-' ZCSTR2 INTO ZCSTR2.
?? ENDIF.
?? CLEAR ZCSTR.
* 將處理過的整數與小數連接起來。
?? IF ZCDEC <> ''.
???? CONCATENATE ZCSTR2 ZCDEC INTO ZCSTR SEPARATED BY ZFLAG.
?? ELSE.
???? ZCSTR = ZCSTR2.
?? ENDIF.
* 將值返回
?? ZSTR = ZCSTR.
ELSE.
?? ZSTR = ZNUM.
ENDIF.
ENDFORM.
*************************************************************************
write時將'-'號提前
PERFORM change_qty USING l_srqty
CHANGING it_inv-srqty.
FORM change_qty USING p_qty
CHANGING p_qty1.
p_qty1 = p_qty.
SHIFT p_qty1 LEFT DELETING LEADING ' '.
SHIFT p_qty1 UP TO '-' LEFT CIRCULAR.
CONDENSE p_qty1 NO-GAPS.
ENDFORM. " change_qty
********************************************************************************************
目的:將字符串尾的負號放在字符串首
CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
CHANGING
value = itab-amunt.
總結
以上是生活随笔為你收集整理的ABAP 负号 提前的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAP实例之ALV
- 下一篇: ABAP数据库操作系列之操作语句讲解Se