将数字金额转换为人民币大写字符串

  function zfi_amount_to_upper.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IN) TYPE  WERT8
*"  EXPORTING
*"     REFERENCE(OUT) TYPE  STRING
*"----------------------------------------------------------------------

  data:
        v_s00(2value '零',
        v_s01(2value '壹',
        v_s02(2value '贰',
        v_s03(2value '叁',
        v_s04(2value '肆',
        v_s05(2value '伍',
        v_s06(2value '陆',
        v_s07(2value '柒',
        v_s08(2value '捌',
        v_s09(2value '玖',
        v_w00(2value '',
        v_w01(2value '拾',
        v_w02(2value '佰',
        v_w03(2value '仟',
        v_w04(2value '万',
        v_w05(4value '拾',
        v_w06(4value '佰',
        v_w07(4value '仟',
        v_w08(2value '亿',
        v_w09(4value '拾',
        v_w10(4value '佰',
        v_w11(4value '仟',
        v_w12(4value '万',
        v_sy(2)  value '圆',
        v_sj(2 value '角',
        v_sf(2 value '分',
        v_amount(16),"将金额转换成字符型
        v_len type i,"v_amount或out的长度
        v_var(5),"v_s0,v_s1,...,v_w0,v_w1,...
        v_num(2type n,"每一位的数值
        v_s_num(2),"v_s0,v_s1,...中的值
        v_weight(2type n,"权数
        v_w_num(4),"v_w0,v_w1,...中的值
        v_flag0 type value 0,"是否输出'零',0不输出,1输出
        v_n type value 0,
        v_index type sy-index.
  v_amount in.
  shift v_amount left deleting leading space.
  shift v_amount left deleting leading '0'.
*-计算分-----------------------------------------
  v_len strlenv_amount ).
  v_len v_len 1.
  v_num v_amount+v_len(1).
  if v_num <> '0'.
    concatenate 'v_s' v_num into v_var.
    write (v_varto v_s_num.
    concatenate v_s_num v_sf out into out.
  endif.
*-计算角-----------------------------------------
  v_len strlenv_amount ).
  v_len v_len 2.
  v_num v_amount+v_len(1).
  if v_num <> '0'.
    concatenate 'v_s' v_num into v_var.
    write (v_varto v_s_num.
    concatenate v_s_num v_sj out into out.
  endif.
*-输出‘整’字-------------------------------------
  if out ' '.
    concatenate '整' out into out.
  endif.
*-计算整数---------------------------------------
  v_len strlenv_amount ).
  v_len v_len 3.
  if v_len 0.
    exit.
  endif.
  v_amount v_amount(v_len)." 整数部分
*-输出‘元’字-------------------------------------
  concatenate v_sy out into out.
  v_n v_len 1.
  v_weight 0.
  do v_len times.
    v_index sy-index.
*   从个位开始
    v_num v_amount+v_n(1).
    if v_num <> '0'.
      concatenate 'v_s' v_num into v_var.
      write (v_varto v_s_num.
      concatenate 'v_w' v_weight into v_var.
      write (v_varto v_w_num.
      concatenate v_s_num v_w_num out into out.
      v_flag0 1.
    else.
      if v_flag0 1.
        concatenate 'v_s' v_num into v_var.
        write (v_varto v_s_num.
        concatenate v_s_num out into out.
        v_flag0 0.
      endif.

      if v_index 5  and v_len > and v_len < .
           concatenate '万' out into out.
      elseif v_index and v_len > 9.
           concatenate '亿' out into out.
      endif.

*      CASE SY-INDEX.
*        WHEN 5.CONCATENATE '万' OUT INTO OUT.
*        WHEN 9.CONCATENATE '亿' OUT INTO OUT.
*      ENDCASE.
    endif.
    v_weight v_weight + 1.
    v_n v_n 1.
  enddo.
*-删除个位可能出现'零'的情况-----------------
  search out for '圆'.
  if sy-subrc 0.
    v_n sy-fdpos 2.
    if v_n >= 0.
      if out+v_n(2v_s00.
        v_len strlenout ).
        concatenate out(v_nout+sy-fdpos into out.
      endif.
    endif.
  endif.

endfunction.


你可能感兴趣的:(将数字金额转换为人民币大写字符串)