SAP中文小写金额转为大写金额

58 篇文章 3 订阅

SAP中文小写金额转为大写金额

一、简介
  1. 在SAP中有很多时候需要将数字转换为大写来处理,但是在SAP中又没有标准的方法来实现,所以下面写了一个对应的方法来实现。
二、实现方法
  1. 首先创建一个写入参数和一个写出参数,如下:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eIUOVKwI-1678545265549)(D:\学习计划笔记\问题解决办法\IMAGE\image-20220507145831602.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8FlpDsB5-1678545265550)(D:\学习计划笔记\问题解决办法\IMAGE\image-20220507145934530.png)]

  2. 具体代码:

    FUNCTION ZFUN_CONVERT_MONEY.
    *"----------------------------------------------------------------------
    *"*"本地接口:
    *"  IMPORTING
    *"     VALUE(I_VAL) TYPE  CHAR20 OPTIONAL
    *"  EXPORTING
    *"     VALUE(E_DXSTR) TYPE  CHAR30
    *"----------------------------------------------------------------------
    
      DATA: zs(20).
      DATA: xs(20).
      DATA: str(30).
      DATA: len TYPE i VALUE 0.
      DATA: cis TYPE i VALUE 0.
      DATA: lis TYPE i VALUE 0.
      DATA: ss(2).
      DATA: rr(1).
      DATA: strr(30).
      DATA: change(30) TYPE c VALUE '1壹2贰3叁4肆5伍6陆7柒8捌9玖0零'.
    *data DXSTR type STRING value ''.
      DATA val TYPE p DECIMALS 2 .
      val = i_val.
    
      CLEAR e_dxstr.
      MOVE val TO str.
      SHIFT str LEFT  DELETING LEADING space.
      SPLIT str AT '.' INTO zs xs."把金额拆分成整数和小数
    
      "把金额字段反过来比如123变成321
      len = strlen( zs )."整数长度
      CLEAR strr.
      cis = len - 1.
      DO len TIMES.
        MOVE zs+cis(1) TO rr.
        CONCATENATE strr rr INTO strr.
        cis = cis - 1.
      ENDDO.
    
      cis = 0.
      DO len TIMES.
        MOVE strr+cis(1) TO ss.
        IF ss <> 0.
          TRANSLATE ss USING change.
          CASE cis.
            WHEN 0.
              CONCATENATE ss '元'        INTO e_dxstr.
            WHEN 1.
              CONCATENATE ss '拾'  e_dxstr INTO e_dxstr.
            WHEN 2.
              CONCATENATE ss '佰'  e_dxstr INTO e_dxstr.
            WHEN 3.
              CONCATENATE ss '仟'  e_dxstr INTO e_dxstr.
            WHEN 4.
              CONCATENATE ss '万'  e_dxstr INTO e_dxstr.
            WHEN 5.
              CONCATENATE ss '拾'  e_dxstr INTO e_dxstr.
            WHEN 6.
              CONCATENATE ss '佰'  e_dxstr INTO e_dxstr.
            WHEN 7.
              CONCATENATE ss '仟'  e_dxstr INTO e_dxstr.
            WHEN 8.
              CONCATENATE ss '亿'  e_dxstr INTO e_dxstr.
            WHEN 9.
              CONCATENATE ss '拾'  e_dxstr INTO e_dxstr.
            WHEN 10.
              CONCATENATE ss '百'  e_dxstr INTO e_dxstr.
            WHEN 11.
              CONCATENATE ss '仟'  e_dxstr INTO e_dxstr.
          ENDCASE.
        ELSEIF ss = 0 AND strr+lis(1) = 0.
          CASE cis.
            WHEN 0.
              IF lis <> 0.
                CONCATENATE '元'  e_dxstr INTO e_dxstr.
              ELSE.
                CONCATENATE '零元'  e_dxstr INTO e_dxstr.
              ENDIF.
            WHEN 4.
              CONCATENATE '万'  e_dxstr INTO e_dxstr.
            WHEN 8.
              CONCATENATE '亿'  e_dxstr INTO e_dxstr.
          ENDCASE.
        ELSEIF ss = 0 AND strr+lis(1) <> 0.
          TRANSLATE ss USING change.
          CASE cis.
            WHEN 0.
              CONCATENATE '元'  ss e_dxstr INTO e_dxstr.
            WHEN 4.
              CONCATENATE '万'  ss e_dxstr INTO e_dxstr.
            WHEN 8.
              CONCATENATE '亿'  ss e_dxstr INTO e_dxstr.
            WHEN OTHERS.
              CONCATENATE ss e_dxstr INTO e_dxstr.
          ENDCASE.
        ENDIF.
        lis = cis.
        cis = cis + 1.
      ENDDO.
      CLEAR ss.
      IF xs <> '00'.
        MOVE xs+0(1) TO ss. TRANSLATE ss USING change.
        CONCATENATE e_dxstr ss '角'  INTO e_dxstr.
        MOVE xs+1(1) TO ss. TRANSLATE ss USING change.
        CONCATENATE e_dxstr ss '分'  INTO e_dxstr.
      ELSE.
        CONCATENATE e_dxstr '整' INTO e_dxstr.
      ENDIF.
    
      IF e_dxstr = '元整'.
        e_dxstr = '零元整'.
      ENDIF.
    
    ENDFUNCTION.
    
  3. 测试结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vorcgCy-1678545265550)(D:\学习计划笔记\问题解决办法\IMAGE\image-20220507150056431.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值