ABAP:根据小数位自动截取,去除末尾多余小数

DATA:kwmeng      TYPE  kwmeng VALUE '100.00',
     ckwmeng(15) TYPE  c . "订单数量 "订单数量

ckwmeng = kwmeng.

PERFORM dele_after_zero CHANGING ckwmeng.
WRITE:ckwmeng.
FORM dele_after_zero  CHANGING p_string.

  DATA: last_char  TYPE c,
        first_char TYPE c,
        n_len      TYPE i,
        n_pos      TYPE i.
*  SEARCH  p_string FOR '.'.
*  IF sy-subrc = 0.
*    WRITE:sy-fdpos.
*  ENDIF.
  IF p_string CS '.'.
    n_len = strlen( p_string ).
    n_pos = n_len - 1.
    last_char = p_string+n_pos(1).
    IF last_char EQ '0' OR last_char EQ '.'.
      p_string = p_string+0(n_pos).
      IF last_char NE '.'.
        PERFORM dele_after_zero CHANGING p_string.
      ENDIF.
    ENDIF.
  ENDIF.
  CONDENSE p_string.
ENDFORM.                    " dele_after_zero
### ABAP去除小数位多余 0 的方法 在 ABAP 编程中,可以通过多种方式来处理字符串或数值中的小数部分,以移除不必要的零。以下是几种常见的方式: #### 使用 `SHIFT` 和 `CONDENSE` 通过组合使用 `SHIFT` 和 `CONDENSE` 关键字可以有效地删除小数点后面无意义的零。 ```abap DATA: lv_number TYPE STRING. IF wa_item-znumber IS NOT INITIAL. lv_number = wa_item-znumber. CONDENSE lv_number. " 合并字符[^1] SHIFT lv_number RIGHT DELETING TRAILING '0'. " 删除右边连续的'0' SHIFT lv_number RIGHT DELETING TRAILING '.'. " 如果有小数点也一并删去 ELSE. lv_number = ''. ENDIF. CONDENSE lv_number. " 再次合并字符 CLEAR wa_item-znumber. ``` 此代码片段展示了当变量不为空时如何操作:先将其赋值给临时字符串变量;接着利用 `CONDENSE` 函数消除内部空白;再分别用两次 `SHIFT ... DELETING TRAILING` 来清除尾部可能出现的‘0’以及可能存在的孤立小数点;最后再次调用 `CONDENSE` 确保结果紧凑。 #### 处理 ALV 输出中小数点后的 0 对于特定场景下的数据显示需求,比如 ALV 报表输出,可以直接设置字段属性避免显示不需要的小数位。 ```abap FORM FRM_CATLG_SET USING P_FIELD P_TEXT P_KEY. DATA: ls_fieldcat TYPE slis_fieldcat_alv. ls_fieldcat-fieldname = p_field. ls_fieldcat-seltext_l = p_text. ls_fieldcat-key = p_key. ls_fieldcat-no_zero = 'X'. IF p_field = 'LINE_SUM'. ls_fieldcat-decimals_out = '0'. " 设置为整数形式展示[^5] ENDIF. APPEND ls_fieldcat TO gd_fieldcat . CLEAR ls_fieldcat . ENDFORM. ``` 这段代码说明了怎样配置 ALV 字段目录项 (`slis_fieldcat_alv`) ,特别是针对金额类字段(如 `LINE_SUM`),指定其不应带有任何小数位,并且启用 `no_zero` 属性防止额外零的出现。 #### 调用函数模块实现更精确控制 如果项目中有更高精度的要求,则可考虑采用标准 SAP 提供的功能模块来进行四舍五入或其他定制化处理。 ```abap CALL FUNCTION 'HR_NZ_ROUNDING_DECIMALS' EXPORTING value_in = dat conv_dec = 4 IMPORTING value_out = dat1 EXCEPTIONS no_rounding_required = 1 decimals_greater_than_10 = 2 rounding_error = 3. ``` 这里介绍了一个名为 `'HR_NZ_ROUNDING_DECIMALS'` 的功能模块,它允许开发者传入待处理的数据及期望保留的有效小数位数,在执行完毕后返回经过适当调整的结果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值