根据小数位递进的(ZTRANSLATE_TO_NUM)





FUNCTION ztranslate_to_num.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(I_NUM) TYPE  ZTRANSLAT
*"     REFERENCE(I_GZ) TYPE  ZEXH
*"     REFERENCE(I_WS) TYPE  ZEXH
*"  EXPORTING
*"     REFERENCE(O_NUM) TYPE  ZTRANSLAT
*"----------------------------------------------------------------------
  DATA o_char TYPE string.
  DATA j_char TYPE string.
  DATA:m_char TYPE string,
       n_char TYPE string.
  DATAlv_qs TYPE c,
        lv_xs TYPE char20,
        lv_zs TYPE ztranslat,
        lv_jia TYPE ztranslat,
        lv_jiac TYPE char20,
        lv_jw TYPE i,
        lv_dec TYPE ztranslat,
        lv_de TYPE char20.

  DATA:gv_xs TYPE ztranslat.
  DATA l_ws TYPE i.
  DATA l_gz TYPE i.
  gv_xs fraci_num ).
  lv_zs trunci_num ).
  DATA la TYPE zexh.
  DATA lb TYPE zexh.
  DATA li TYPE i.
  DATA ln TYPE i.
  DATA lm TYPE i.
  DATA lzs1 TYPE string.
  DATA lzs2 TYPE string.
  DATA lzs3 TYPE string.
  la i_gz.
  lb i_ws.
  CONDENSE la NO-GAPS.
  CONDENSE lb NO-GAPS.
  l_gz la.
  l_ws lb.
  IF l_ws -1.
    lzs1 lv_zs.
    SPLIT lzs1 AT '.' INTO lzs1 lzs2.
    CONDENSE lzs1.
    li strlenlzs1 ).
    IF li 1.
      "lv_dec = lv_zs.
    ELSE.
      ln li 1.
      lzs2 lzs1+0(ln).
      lzs3 lzs1+ln(1).
      lm lzs3.
      IF lm > la.
        lm 10.
      ELSE.
        lm 0.
      ENDIF.
      lv_zs lzs2 * 10 + lm.
    ENDIF.
    CLEAR:lv_dec.
  ELSEIF l_ws -2.
    lzs1 lv_zs.
    SPLIT lzs1 AT '.' INTO lzs1 lzs2.
    CONDENSE lzs1.
    li strlenlzs1 ).
    IF li <= 2.
      "lv_dec = lv_zs.
    ELSE.
      ln li 2.
      lzs2 lzs1+0(ln).
      lzs3 lzs1+ln(1).
      lm lzs3.
      IF lm > la.
        lm 100.
      ELSE.
        lm 0.
      ENDIF.
      lv_zs lzs2 * 100 + lm.
    ENDIF.
    CLEAR:lv_dec.
  ELSE.
*  IF l_gz = 0 AND l_ws = 0.
*
*    j_char = i_num.
*    SPLIT j_char AT '.' INTO m_char n_char.
*    CONDENSE m_char NO-GAPS.
*    o_num = m_char.
*  ELSE.

    WRITE gv_xs TO lv_xs NO-GROUPING.
    CONDENSE lv_xs.
    lv_jw l_ws + 1.
    l_ws l_ws + 2.
    lv_qs lv_xs+l_ws(1).
    lv_de lv_xs+0(l_ws).

    REPLACE ALL OCCURRENCES OF ',' IN lv_de WITH '.'.
    lv_dec lv_de.

    lv_jiac lv_jia.
    CONDENSE lv_jiac.
    IF lv_jw '1'.
      lv_jw '0'.
    ENDIF.
    lv_jiac+lv_jw(1'1'.
    REPLACE ALL OCCURRENCES OF ',' IN lv_jiac WITH '.'.
    lv_jia lv_jiac.

    IF lv_qs > l_gz.
      lv_dec lv_dec + lv_jia.
    ENDIF.
  ENDIF.


  o_num lv_zs +  lv_dec.
*    CONDENSE o_num NO-GAPS.
*    SHIFT o_num RIGHT DELETING TRAILING '0' .
*    o_char = o_num.
*    CONDENSE o_char NO-GAPS.
*    SHIFT o_char RIGHT DELETING TRAILING '0' .
*    o_num = o_char.

*  ENDIF.
*  SHIFT o_num RIGHT DELETING TRAILING '.' .
ENDFUNCTION.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值