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中将负号提前的方法
在ABAP中将负号提前的方法 第一种: PERFORM. change_qty USING l_srqty CHANGING it_inv-srqty. FORM. change_qty USING ...
- Smartform中负号提前解决方法
Smartform中, 打印 输出格式会经常出现问题,特别是金额.数量字段,如何解决打印时负号后置的问题呢? 其实很简单: &field(<)& 符号位显 ...
- abp web ui 负号提前显示
crm web ui 负号默认显示在后面,统一把负号改为左边显示, 代码增强方法 CL_BSP_UTILITY->MAKE_STRING ENHANCEMENT 1 ZENH_CRM_CL_B ...
- 【ABAP妙用】复制ALV之负号提前
场景: 用户一般Ctrl+C复制ALV数据到Excel处理,如果有负数的数值,负号在数值的后面,Excel不认识,要费劲巴拉的一个个改正,苦不堪言! 本程序功能: 在ALV复制数据后,直接更改剪贴板里 ...
- SAP ALV 负号提前
需求:ALV中的数量和金额的负号默认是显示在最后面的,现在要将负号显示在前面. 效果展示: 实现: 关键代码: FUNCTION conversion_exit_zsign_output . *&qu ...
- SAP ABAP 中一些常用函数
函数名描述 ABAP_DOCU_DOWNLOAD Download ABAP documentation in HTML format. ARFC_GET_TID – 以十六进制形式返回终端的IP地址 ...
- sap ABAP中常用函数
函数名描述 ABAP_DOCU_DOWNLOAD Download ABAP documentation in HTML format. ARFC_GET_TID – 以十六进制形式返回终端的IP地址 ...
- SAP中负数的表示增强 负号从数字后更改到数字前面
SAP中的负号是放后面的,其实也无所谓,谁看不出来啊,关键人家要你改也没有办法.有个函数CLOI_PUT_SIGN_IN_FRONT是把负号提前的,但是它是把字符转化为字符型输出的.就是把负号spli ...
- ABAP 金额内外部转换函数
SAP货币存储 一般而言,币种的小数位为2,所以系统默认的位数也是2,但是有一些特殊币种如日元JPY,没有小数位.只要小数位不等于2,需要在系统中特殊处理(通过转换因子进行转换). 1.如果某货币的小 ...
最新文章
- JGG:口腔微生物组助力妊娠糖尿病识别
- 《Windows驱动开发技术详解》读书笔记(一)
- 分组密码的工作模式--wiki
- Qt学习之路(1)------Qt常用类用法说明
- 电脑记时----千年虫
- nemesis什么车_nemesis是什么意思_nemesis的翻译_音标_读音_用法_例句_爱词霸在线词典...
- Shuffling Machine (20)
- Elasticsearch 实战2:ES 项目实战(二):基本操作、批处理、高级查询
- 经典卷积神经网络的学习(三)—— Inception Net
- 毕马威_毕马威中国为清华大学经管学院学生现场授课
- SQL,修改表列明错误,不允许保存更改,阻止保存要求重新创建表的更改
- C语言自学之路六(循环语句详解)
- 本地项目上传至git码云步骤(超详细,附图文)
- iOS开发系列--NextPrevious On-Demand Resource Basics
- matlab在点内加入权值,matlab权值矩阵
- 微博创作者网址及申请条件,微博创作者收益
- 使用PHP做一个网站访问IP记录功能
- 基于FPGA的图像处理之幂律(伽马校正)变化
- wnmp(wordpress环境程序windows+Nginx+PHP7.2)
- 软件测试项目流程报告,周口软件测试报告流程,科技项目申报