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

文章介绍了如何在ABAP编程环境中使用`ZFUC_NUMERIC_TO_CHINESE`函数将含税总价金额转换为中文形式的人民币大写字符串,同时处理可能出现的错误情况。
摘要由CSDN通过智能技术生成

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


 "含税总价金额转人民币
      DATA: lv_tprice TYPE  char20.
      CALL FUNCTION 'ZFUC_NUMERIC_TO_CHINESE'
        EXPORTING
          iv_money    = gs_data-netwrt
        IMPORTING
          ev_money    = lv_tprice
        EXCEPTIONS
          wrong_money = 1
          OTHERS      = 2.
      IF sy-subrc <> 0.
* Implement suitable error handling here
      ENDIF.
      gs_data-tamount = lv_tprice.


FUNCTION ZFUC_NUMERIC_TO_CHINESE.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(IV_MONEY) TYPE  NETWR
*"  EXPORTING
*"     VALUE(EV_MONEY)
*"  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 '.'.
    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:ev_money,units_off.
  lastd = 0.
  curnt_off = STRLEN( money_str ) - 1.
  WHILE curnt_off >= 0.
    curntd = money_str+curnt_off(1).
    i = curntd.
    cword = digts+i(1).

    weight = units+units_off(1).

    i = units_off / 1.
    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 ev_money INTO ev_money.
    lastd = curntd.
    SUBTRACT 1 FROM curnt_off.
    ADD 1 TO units_off.
  ENDWHILE.
  IF ev_money NS '分'.
*    CONCATENATE ev_money '圆整' INTO ev_money.  modfiy   by   ityuqiu  20240411
    CONCATENATE ev_money '整' INTO ev_money.
  ELSE.
    cword = ev_money.
    IF cword = '零'.
      SHIFT ev_money BY 1 PLACES.
    ENDIF.
  ENDIF.

ENDFUNCTION.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值