字符串增加千分位 负号提前处理

复制代码
*千分位
 DATA :
    LV_STR   TYPE STRING,
    LV_CURRC TYPE STRING,
    LV_TMP1  TYPE STRING,
    LV_TMP2  TYPE STRING,
    LV_LEN   TYPE I,
    LV_LEN1  TYPE I,
    LV_LEN2  TYPE I,
    LV_LEN3  TYPE I,
    LV_LEN4  TYPE I.
  DATA: LV_CURR  TYPE BAPICURR-BAPICURR,
        LV_ANBTR TYPE STRING.

  CLEAR:LV_STR,LV_CURRC,LV_TMP1,LV_TMP2,LV_LEN,LV_LEN1,LV_LEN2,LV_LEN3,LV_LEN4.

  CLEAR LV_ANBTR.
  LV_ANBTR = GS_OLE-ANBTR.


  CONDENSE GS_OLE-ANBTR NO-GAPS.
  LV_STR = GS_OLE-ANBTR.
*统一转换给外部数据,保留精度
  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
    EXPORTING
      CURRENCY        = ''
      AMOUNT_INTERNAL = LV_STR
    IMPORTING
      AMOUNT_EXTERNAL = LV_CURR.

  CLEAR LV_CURRC.
  LV_CURRC = LV_CURR.
  SPLIT LV_CURRC AT '.' INTO LV_TMP1 LV_TMP2.
  CONDENSE:LV_TMP1,LV_TMP2.

  LV_LEN = STRLEN( LV_TMP1 ).
  LV_LEN1 = LV_LEN MOD 3.

  LV_LEN2 = LV_LEN DIV 3.

*根据整除保留的整数进行循环,无偏移时最后一次不用循环默认为0
  DO LV_LEN2 TIMES.
*小于1和无偏移时,最后一次的逗号不用加
    IF LV_LEN = 3 OR ( LV_LEN1 = 0 AND SY-INDEX = LV_LEN2 ).
      EXIT.
    ENDIF.

*偏移按照第一次进行偏移
    IF LV_LEN1 <> 0.
      LV_LEN3 = LV_LEN1 + SY-INDEX - 4 + 3 * SY-INDEX .
    ENDIF.

*无偏移3的倍数+当前次数-1,1为第一次偏移
    IF LV_LEN1 = 0.
      LV_LEN3 = 3 * SY-INDEX + SY-INDEX - 1.
    ENDIF.
*从中间插入
    LV_LEN4 = STRLEN( LV_TMP1 ) - LV_LEN3.
    CONCATENATE LV_TMP1+0(LV_LEN3) ',' LV_TMP1+LV_LEN3(LV_LEN4) INTO LV_TMP1.
  ENDDO.
*保留2位小数
  LV_CURRC = LV_TMP1 && '.' && LV_TMP2+0(2).
  CONDENSE LV_CURRC.
  CLEAR GS_OLE-ANBTR.

  GS_OLE-ANBTR = LV_CURRC.



*负号提前

  CALL FUNCTION 'CLOI_PUT_SIGN_IN_FRONT'
    CHANGING
      VALUE = LV_ANBTR.

  IF LV_ANBTR+0(1) = '-'.
    GS_OLE-ANBTR = '-' && GS_OLE-ANBTR.
  ENDIF.
复制代码

 

posted @   YangMeiko  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示