SAP数值金额转大写函数

FUNCTION ZFUN_CONVERT_NUMERIC_TO_CHINES.
*"----------------------------------------------------------------------
*"*"Local interface:
*"  IMPORTING
*"     REFERENCE(IV_MONEY) TYPE  FAGLFLEXA-HSL
*"  EXPORTING
*"     REFERENCE(EV_MONEY) TYPE  C
*"  EXCEPTIONS
*"      WRONG_MONEY
*"----------------------------------------------------------------------

  IF IV_MONEY 0.
    EV_MONEY ''.
    EXIT.
  ENDIF.
  DATA:MONEY_STR(33).
  MONEY_STR IV_MONEY.
  CONDENSE MONEY_STR NO-GAPS.
  IF MONEY_STR CN '0123456789. '.
    RAISE WRONG_MONEY.
  ENDIF.
  DATA:I TYPE I.
  IF MONEY_STR CS '.'.
    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(30VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万',
        DIGTS(20VALUE '零壹贰叁肆伍陆柒捌玖'.
* clear:ev_money,units_off.
  LASTD 0.
  CURNT_OFF STRLENMONEY_STR 1.
  WHILE CURNT_OFF >= 0.
    CURNTD MONEY_STR+CURNT_OFF(1).
    CURNTD.
    CWORD DIGTS+I(1).
    WEIGHT UNITS+UNITS_OFF(1).
    UNITS_OFF / 1.
    IF CURNTD 0.             "Current digit is 0
      IF I OR I 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 EV_MONEY INTO EV_MONEY.
    LASTD CURNTD.
    SUBTRACT FROM CURNT_OFF.
    ADD TO UNITS_OFF.
  ENDWHILE.
  IF EV_MONEY NS ''.
    CONCATENATE EV_MONEY 'INTO EV_MONEY.
  ELSE.
    CWORD EV_MONEY.
    IF CWORD ''.
      SHIFT EV_MONEY BY PLACES.
    ENDIF.
  ENDIF.




ENDFUNCTION.

猜你喜欢

转载自www.cnblogs.com/coderfarmer/p/13401745.html
今日推荐