`
guanhuaing
  • 浏览: 1238043 次
文章分类
社区版块
存档分类
最新评论

ABAP--将数字金额转换为人民币大写字符串(增加UNICODE版本)

 
阅读更多

1、No Uncode Version

FUNCTION Z_CONVERT_NUMERIC_TO_CHINESE.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(PI_MONEY) LIKE BSEG-DMBTR
*" EXPORTING
*" REFERENCE(PO_CHINESE)
*" EXCEPTIONS
*" WRONG_MONEY
*"----------------------------------------------------------------------
DATA:MONEY_STR(16).
DATA:I TYPE I,
J TYPE I,
UNITS_OFF TYPE I,
CURNT_OFF TYPE I.
DATA:LASTD TYPE N,CURNTD TYPE N.
DATA:CWORD(2),CUNIT(2),OCUNIT(2).
IF PI_MONEY = 0.
PO_CHINESE = '零'.
EXIT.
ENDIF.
MONEY_STR = PI_MONEY.
IF MONEY_STR CN '0123456789. '.
RAISE WRONG_MONEY.
ENDIF.
*人为删除小数点
IF MONEY_STR CS '.'.
I = SY-FDPOS + 1.
MONEY_STR+SY-FDPOS = MONEY_STR+I.
ENDIF.
CONDENSE MONEY_STR NO-GAPS.
DATA:UNITS(30) VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万',
DIGTS(20) VALUE '零壹贰叁肆伍陆柒捌玖'.
LASTD = 0.
CURNT_OFF = STRLEN( MONEY_STR ) - 1.
CLEAR OCUNIT.
WHILE CURNT_OFF >= 0.
CURNTD = MONEY_STR+CURNT_OFF(1). "提取数字
I = CURNTD * 2.
CWORD = DIGTS+I(2). "取数字对应的汉字
CUNIT = UNITS+UNITS_OFF(2). "取单位
I = UNITS_OFF / 2. "取单位对应的位置
IF CURNTD = 0. "Current digit is 0
IF I = 2.
CLEAR:CWORD.
IF CURNT_OFF = 0. "最后一个数字为0清除单位
CLEAR:CUNIT.
ENDIF.
ELSEIF I = 6 OR I = 10.
OCUNIT = CUNIT.
CLEAR:CWORD.
CLEAR:CUNIT.
IF CURNT_OFF = 0. "最后一个数字为0清除单位
ENDIF.
ELSEIF LASTD = 0. "前面的一个数字是零则避免再次填写零
CLEAR:CWORD,CUNIT.
ELSE.
CLEAR:CUNIT.
ENDIF.
elseif I = 10.
CLEAR OCUNIT.
ENDIF.
IF OCUNIT ne space and CURNTD ne 0.
CONCATENATE OCUNIT PO_CHINESE INTO PO_CHINESE.
CLEAR OCUNIT.
endif.
CONCATENATE CWORD CUNIT 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.

2 Unicode Version

FUNCTION zfuc_numeric_to_chinese.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IV_MONEY) TYPE BF_DMBTR
*" EXPORTING
*" REFERENCE(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.
ELSE.
cword = ev_money.
IF cword = '零'.
SHIFT ev_money BY 1 PLACES.
ENDIF.
ENDIF.

ENDFUNCTION.

分享到:
评论

相关推荐

    ABAP常用字符串操作

    在ABAP中,字符串连接是一种常见的操作方式,用于将两个或多个字符串合并成一个新的字符串。实现字符串连接的方法主要是通过`CONCATENATE`语句。 **语法示例**: ```abap CONCATENATE dobj1 dobj2 INTO result [IN...

    ABAP751 ABAP - Keyword Documentation

    ABAP - Keyword Documentation This documentation describes the syntax and meaning of the keywords of the ABAP language and its object-oriented part ABAP Objects. Alongside this, language frameworks ...

    SAP ABAP数字金额转中文大写源代码

    本文将详细介绍一个用于将数字金额转换为中文大写的ABAP程序,并对其进行深入解析。 #### 二、程序结构与逻辑分析 该程序主要通过循环处理输入的数字金额(小数点后两位),并将其转换成对应的中文大写表示形式。...

    判断一个字符串或字符串中的一个字符是否为数字类型

    或者,可以尝试转换整个字符串为整数,捕获 `NumberFormatException` 异常: ```java try { Integer.parseInt(str); System.out.println("字符串是数字类型"); } catch (NumberFormatException e) { System....

    ABAP-培训教材目录

    ABAP-培训教材附录 ABAP-培训教材ABAP-培训教材ABAP-培训教材ABAP-培训教材

    CD260-ABAP-in-Eclipse-开发-CN

    CD260-ABAP-in-Eclipse-开发-CN CD260-ABAP-in-Eclipse-开发-CNCD260-ABAP-in-Eclipse-开发-CNCD260-ABAP-in-Eclipse-开发-CN

    eclipse-abap-keywordcolors-master.rar

    eclipse-abap-keywordcolors eclipse-abap-关键字颜色

    SAP中文教材全系列之ABAP-BC400_ZH

    本文档是《SAP中文教材全系列之ABAP-BC400_ZH》,为SAP ABAP编程语言的学习提供参考。文档包含了详细的ABAP课程内容,旨在帮助学员理解并掌握ABAP编程的基础知识和高级技能。以下将详细阐释文档所涵盖的知识点。 ...

    ABAP字符串SQL Functions语法总结

    ABAP是一种专为SAP系统设计的编程语言,而在ABAP中处理字符串时,SQL Functions提供了许多方便的方法。本文将对ABAP SQL Functions for Strings进行详细的语法总结。 首先,我们来讨论一下如何在ABAP SQL中跨Client...

    ABAP常用字符串操作收集整理

    ABAP 中的字符串操作是开发者日常工作中不可或缺的一部分,本文将对 ABAP 中常用的字符串操作进行收集和整理,包括字符串连接、字符串分隔、字符串查找、字符串替换、去前导 0 等操作。 1. 字符串连接 CONCATENATE...

    英文字母与数字的相互转换

    这种转换有时被称为字母数字编码,特别是在需要将字符序列转换为数值表示或反之亦然的场景下。例如,在网络通信、密码学、数据存储以及各种算法实现中,这种转换都发挥着关键作用。 在给定的标题“英文字母与数字的...

    ABAP-ALV进阶

    "ABAP-ALV进阶知识点详解" ABAP-ALV进阶是指在SAP系统中使用ABAP语言开发的高级列表查看器(ALV)。ALV是SAP系统中心的列表标准,可以在ABAP程序中进行报表输出。下面是ABAP-ALV进阶的知识点详解: 一、ALV概要 ...

    ABAP-学习笔记-通用

    ABAP-学习笔记-通用

    abap字符串操作

    包括abap低于字符串的操作相关示例代码

    ABAP-4目前最完美学习手册

    ### ABAP-4学习手册核心知识点解析 #### ABAP/4简介与基础 - **ABAP/4**:一种专为SAP系统设计的高级商业应用编程语言。 - **ABAP/4基础**:介绍了创建简单ABAP/4程序的方法,包括命名规则、程序属性指定等。 ###...

    SAP-ABAP-Certification-Review.pdf

    SAP-ABAP-Certification-Review.pdf

    abap处理字符串[参考].pdf

    在ABAP中,字符串处理是非常重要的一部分,今天我们将学习ABAP中处理字符串的各种方法。 一、移动字段内容 ABAP中移动字段内容有多种方法,下面我们将分別介绍。 1、按给定位置数移动字符串 语法:SHIFT <c> [BY...

    ABAP-数据类型学习笔记

    ABAP-数据类型学习笔记

    abap-ALV.rar_ABAP系统ALV_abap_abap开发alv

    标题“abap-ALV.rar_ABAP系统ALV_abap_abap开发alv”暗示我们将深入探讨ABAP ALV的使用,特别是在ABAP系统中的应用以及如何进行开发。 描述中提到“ABAP ALV总结,ALV格式,REUSE_ALV_GRID_DISPLAY_LVC函数使用”,...

Global site tag (gtag.js) - Google Analytics