系统中自带的函数SPELL_AMOUNT适用于没有小数的情况,如果金额带小数,结果就会出现问题,结果如下

这里有一个优化过的自定义小写转大写函数,源代码如下:

FUNCTION zfun_convert_money.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_VAL) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(E_DXSTR) TYPE  STRING
*"----------------------------------------------------------------------
  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.

运行结果如下:

经过理解发现这个函数有一个小小的BUG,如下:

稍作修改,加上上述代码中加粗标记的一段代码,结果如下:

SAP 金额转换成大写相关推荐

  1. 小写数字转大写_不得不说的Excel小技巧:设置单元格格式将小写金额转换成大写...

    大家好,我是小秋,近期一段时间比较忙,没有在今日头条上更新原创文章了.希望朋友们多多见谅,下面与大家分享一个Excel实用小技巧:如何设置单元格格式将小写金额转换成大写? 1.应用场景 在报销单.收据 ...

  2. python数字大小写转换代码_用python实现把数字人民币金额转换成大写的脚本程序...

    # -*- coding: utf-8 -*- def Num2MoneyFormat( change_number ): """ .转换数字为大写货币格式( forma ...

  3. 【简单易懂】Java字符串应用场景:数字金额转换成大写汉字金额【金额转换】

    Java字符串应用场景:数字金额转换成汉字金额 文章目录 Java字符串应用场景:数字金额转换成汉字金额 前言 一.String简单介绍 二.字符串在开发中的应用场景 三.金额转换 3.1解题思路 3 ...

  4. 人民币金额转换成大写格式(java)

    实现本实例关键在于以下几点: 将数字格式化,如果存在小数部分,将其转换为3位小数(DecimalFormat方法): 分别将整数部分与小数部分转换为大写方式,并插入金额单位: 组合转换后整数部分与小数 ...

  5. .NET把小写数字金额转换成大写人民币金额的两种算法

    第一种方法: 用正则表达式,C#方法如下 usingSystem.Text.RegularExpressions;//首先引入命名空间 private string DaXie ( string  m ...

  6. 金额转换成大写和简称的方法

    /*** 获取金额的中文大写或简称的方法* @author xxx* @param money 传入的金额字符串* @param simple 为true代表金额简称,false为繁体字大写,默认为f ...

  7. js 将金额转换成大写汉字

    function convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', ...

  8. (转)WORD中小写金额转换成大写

    转自:http://www.officefans.net/cdb/viewthread.php?tid=52631 '* +++++++++++++++++++++++++++++ '* Create ...

  9. Word中数值小写转大写,金额小写批量转换成大写形式,也支持WPS

    Word中的小写金额转换成大写形式,或者将大写形式转换成小写形式,使用<Word精灵4.4>都可以完成,一键实现需求. 插件下载地址 1.https://wws.lanzous.com/i ...

  10. 阿拉伯数字小写金额转换成中文大写金C额程序说明

    阿拉伯数字小写金额转换成中文大写金额C程序说明 1.问题的提出 寒假帮同学交缴话费时,不经意间看到收据上同时有小写金额和大写金额,想想各种各样的票据诸如缴费收据.银行业务回单.商场销售凭证.专用发票等 ...

最新文章

  1. 使用隐式Intent打开系统浏览器的百度网页
  2. linux中tr命令的用法
  3. Tomcat源码解析六:Tomcat类加载器机制
  4. 【OJ】华东师范大学Python程序设计OJ题解
  5. linux下iconv编码转换的用法
  6. 部署FIM 2010 R2—1先决条件准备
  7. 细数嵌入式开发与通用系统开发的不同
  8. eZ Publish 的文章
  9. CSS3属性calc函数(CSS3)
  10. word怎么删除不要的页,即刻删除空白页
  11. 【异常】The field file exceeds its maximum permitted size of 1048576 bytes.
  12. java裁剪缩放图片代码下载
  13. 红蜘蛛5屏幕测试软件,红蜘蛛5校色仪怎么用?显示器校色及测试色域和色彩精准度详细教程(2)...
  14. idea的几个好用快捷键、常用配置(包括git)、jdk和javaSE和javaEE、创建一个SE工程、debug、创建一个Web工程、打war包
  15. 多目标优化系列(四)RM-MEDA
  16. 【英语学习】关于音标的汇总图分享
  17. html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)
  18. 封建制度与奴隶制度的区别
  19. 拾忆Elasticsearch04:Elasticsearch实操
  20. php中使用soap的建立共享接口

热门文章

  1. Ubuntu修改DNS
  2. 移动设备管理的具体措施有哪些?(下)
  3. 彻底卸载vscode Linux,Ubuntu vscode 安装与卸载
  4. PHP将PPT文件转成图片
  5. IT给生活带来了什么?
  6. 计算机网卡的安装过程,千兆网卡怎么装_千兆网卡安装步骤
  7. 台达plc接线图实物_台达PLC dvp-14es 外部电路怎么接线
  8. 【Vegas原创】IPAD忘记密码重置恢复出厂设置
  9. PyTorch常用5个抽样函数
  10. 蓝墨云班课在计算机应用基础的教学,蓝墨云班课在“计算机应用基础”课程教学中的应用效果分析...