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

function z_convert_numeric_to_chinese.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(PI_MONEY) LIKE  BSEG-DMBTR
*"  EXPORTING
*"     REFERENCE(PO_CHINESE)
*"  EXCEPTIONS
*"      WRONG_MONEY
*"----------------------------------------------------------------------
  if pi_money = 0.
    po_chinese = '零'.
    exit.
  endif.
  data:money_str(13).
  money_str = pi_money.
  if money_str cn '0123456789. '.
    raise wrong_money.
  endif.
  data:i type i.
  if money_str cs '.'.
    i = sy-fdpos + 1.
    money_str+sy-fdpos = money_str+i.
  endif.
  condense money_str no-gaps.
  data:units_off type i,
       curnt_off type i.
  data:lastd type n,curntd type n.
  data:cword(2),weight(2).
  data:units(30) value '分角元拾佰仟万拾佰仟亿拾佰仟万',
       digts(20) value '零壹贰叁肆伍陆柒捌玖'.
* clear:po_chinese,units_off.
  lastd = 0.
  curnt_off = strlen( money_str ) - 1.
  while curnt_off >= 0.
    curntd = money_str+curnt_off(1).
    i = curntd * 2.
    cword = digts+i(2).
    weight = units+units_off(2).

    i = units_off / 2.
    if curntd = 0.             "Current digit is 0
      if i = 2 or i = 6 or i = 10.
        clear:cword.
        if curnt_off = 0.
          clear:weight.
        endif.
      elseif lastd = 0.
        clear:cword,weight.
      else.
        clear:weight.
      endif.
    endif.
    concatenate cword weight po_chinese into po_chinese.
    lastd = curntd.
    subtract 1 from curnt_off.
    add 2 to units_off.
  endwhile.
  if po_chinese
function z_convert_numeric_to_chinese.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     VALUE(PI_MONEY) LIKE  BSEG-DMBTR
*"  EXPORTING
*"     REFERENCE(PO_CHINESE)
*"  EXCEPTIONS
*"      WRONG_MONEY
*"----------------------------------------------------------------------
  if pi_money = 0.
    po_chinese = '零'.
    exit.
  endif.
  data:money_str(13).
  money_str = pi_money.
  if money_str cn '0123456789. '.
    raise wrong_money.
  endif.
  data:i type i.
  if money_str cs '.'.
    i = sy-fdpos + 1.
    money_str+sy-fdpos = money_str+i.
  endif.
  condense money_str no-gaps.
  data:units_off type i,
       curnt_off type i.
  data:lastd type n,curntd type n.
  data:cword(2),weight(2).
  data:units(30) value '分角元拾佰仟万拾佰仟亿拾佰仟万',
       digts(20) value '零壹贰叁肆伍陆柒捌玖'.
* clear:po_chinese,units_off.
  lastd = 0.
  curnt_off = strlen( money_str ) - 1.
  while curnt_off >= 0.
    curntd = money_str+curnt_off(1).
    i = curntd * 2.
    cword = digts+i(2).
    weight = units+units_off(2).

    i = units_off / 2.
    if curntd = 0.             "Current digit is 0
      if i = 2 or i = 6 or i = 10.
        clear:cword.
        if curnt_off = 0.
          clear:weight.
        endif.
      elseif lastd = 0.
        clear:cword,weight.
      else.
        clear:weight.
      endif.
    endif.
    concatenate cword weight po_chinese into po_chinese.
    lastd = curntd.
    subtract 1 from curnt_off.
    add 2 to units_off.
  endwhile.
  if po_chinese ns '分'.
    concatenate po_chinese '整' into po_chinese.
  else.
    cword = po_chinese.
    if cword = '零'.
      shift po_chinese by 2 places.
    endif.
  endif.
endfunction. 
ns '分'.
    concatenate po_chinese '整' into po_chinese.
  else.
    cword = po_chinese.
    if cword = '零'.
      shift po_chinese by 2 places.
    endif.
  endif.
endfunction. 

你可能感兴趣的:(字符串,职场,休闲,人民币)