根据小数位递进的(ZTRANSLATE_TO_NUM)

来源:互联网 发布:qq单向好友软件 编辑:程序博客网 时间:2024/06/06 07:44




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
原创粉丝点击