SAP ABAP 金额转换大写函数
1.


1 DATA: zs(15). 2 DATA: xs(15). 3 DATA: str(30). 4 DATA: len TYPE i VALUE 0. 5 DATA: cis TYPE i VALUE 0. 6 DATA: ss(2). 7 DATA: rr(1). 8 DATA: strr(15). 9 DATA: change(30) TYPE c VALUE '1壹2贰3叁4肆5伍6陆7柒8捌9玖0零'. 10 *data dxstr(80). 11 CLEAR dxstr. 12 MOVE val TO str. 13 SHIFT str LEFT DELETING LEADING space. 14 SHIFT str LEFT DELETING LEADING '0'. 15 SPLIT str AT '.' INTO zs xs. 16 len = strlen( zs ). CLEAR strr. cis = len - 1. 17 DO len TIMES. 18 MOVE zs+cis(1) TO rr. 19 CONCATENATE strr rr INTO strr. 20 cis = cis - 1. 21 ENDDO. 22 cis = 0. 23 DO len TIMES. 24 MOVE strr+cis(1) TO ss. 25 TRANSLATE ss USING change. 26 CASE cis. 27 WHEN 0. 28 IF ss = '零'. 29 CONCATENATE '元' dxstr INTO dxstr. 30 ELSE. 31 CONCATENATE ss '元' dxstr INTO dxstr. 32 ENDIF. 33 WHEN 1. 34 IF ss = '零'. 35 CONCATENATE ss dxstr INTO dxstr. 36 ELSE. 37 CONCATENATE ss '拾' dxstr INTO dxstr. 38 ENDIF. 39 WHEN 2. 40 IF ss = '零'. 41 CONCATENATE ss dxstr INTO dxstr. 42 ELSE. 43 CONCATENATE ss '佰' dxstr INTO dxstr. 44 ENDIF. 45 WHEN 3. 46 IF ss = '零'. 47 CONCATENATE ss dxstr INTO dxstr. 48 ELSE. 49 CONCATENATE ss '仟' dxstr INTO dxstr. 50 ENDIF. 51 WHEN 4. 52 IF ss = '零'. 53 CONCATENATE '万' dxstr INTO dxstr. 54 ELSE. 55 CONCATENATE ss '万' dxstr INTO dxstr. 56 ENDIF. 57 WHEN 5. 58 IF ss = '零'. 59 CONCATENATE ss dxstr INTO dxstr. 60 ELSE. 61 CONCATENATE ss '拾' dxstr INTO dxstr. 62 ENDIF. 63 WHEN 6. 64 IF ss = '零'. 65 CONCATENATE ss dxstr INTO dxstr. 66 ELSE. 67 CONCATENATE ss '佰' dxstr INTO dxstr. 68 ENDIF. 69 WHEN 7. 70 IF ss = '零'. 71 CONCATENATE ss dxstr INTO dxstr. 72 ELSE. 73 CONCATENATE ss '仟' dxstr INTO dxstr. 74 ENDIF. 75 WHEN 8. 76 IF ss = '零'. 77 CONCATENATE '亿' dxstr INTO dxstr. 78 ELSE. 79 CONCATENATE ss '亿' dxstr INTO dxstr. 80 ENDIF. 81 WHEN 9. 82 IF ss = '零'. 83 CONCATENATE ss dxstr INTO dxstr. 84 ELSE. 85 CONCATENATE ss '拾' dxstr INTO dxstr. 86 ENDIF. 87 WHEN 10. 88 IF ss = '零'. 89 CONCATENATE ss dxstr INTO dxstr. 90 ELSE. 91 CONCATENATE ss '百' dxstr INTO dxstr. 92 ENDIF. 93 WHEN 11. 94 IF ss = '零'. 95 CONCATENATE ss dxstr INTO dxstr. 96 ELSE. 97 CONCATENATE ss '仟' dxstr INTO dxstr. 98 ENDIF. 99 ENDCASE. 100 cis = cis + 1. 101 ENDDO. 102 CLEAR ss. 103 IF xs <> '00'. 104 MOVE xs+0(1) TO ss. 105 TRANSLATE ss USING change. 106 IF ss <> '零'. 107 CONCATENATE dxstr ss '角' INTO dxstr. 108 ENDIF. 109 MOVE xs+1(1) TO ss. 110 TRANSLATE ss USING change. 111 IF ss <> '零'. 112 CONCATENATE dxstr ss '分' INTO dxstr. 113 ENDIF. 114 ELSE. 115 CONCATENATE dxstr '整' INTO dxstr. 116 ENDIF. 117 REPLACE '零零零' WITH '零' INTO dxstr. 118 REPLACE '零零零' WITH '零' INTO dxstr. 119 REPLACE '零零零' WITH '零' INTO dxstr. 120 REPLACE '零零' WITH '零' INTO dxstr. 121 REPLACE '零零' WITH '零' INTO dxstr. 122 REPLACE '零零' WITH '零' INTO dxstr. 123 REPLACE '零万' WITH '万' INTO dxstr. 124 REPLACE '零元' WITH '元' INTO dxstr. 125 REPLACE '零亿' WITH '亿' INTO dxstr. 126 REPLACE '亿万' WITH '亿' INTO dxstr. 127 CONDENSE dxstr NO-GAPS. 128 IF dxstr = '整'. 129 dxstr = ''. 130 ENDIF.
2.

1 DATA:money_str(33). 2 DATA:i TYPE i. 3 DATA:units_off TYPE i, 4 curnt_off TYPE i. 5 DATA:lastd TYPE n,curntd TYPE n. 6 DATA:cword(2),weight(2). 7 DATA:units(30) VALUE '分角元拾佰仟万拾佰仟亿拾佰仟万', 8 digts(20) VALUE '零壹贰叁肆伍陆柒捌玖'. 9 10 IF iv_money = 0. 11 ev_money = '零'. 12 EXIT. 13 ENDIF. 14 15 money_str = iv_money. 16 CONDENSE money_str NO-GAPS. 17 18 IF money_str CN '0123456789. '. 19 RAISE wrong_money. 20 ENDIF. 21 22 IF money_str CS '.'. 23 i = sy-fdpos + 1. 24 money_str+sy-fdpos = money_str+i. 25 ENDIF. 26 27 CONDENSE money_str NO-GAPS. 28 29 * clear:ev_money,units_off. 30 lastd = 0. 31 curnt_off = strlen( money_str ) - 1. 32 WHILE curnt_off >= 0. 33 curntd = money_str+curnt_off(1). 34 i = curntd. 35 cword = digts+i(1). 36 weight = units+units_off(1). 37 i = units_off / 1. 38 IF curntd = 0. "Current digit is 0 39 IF i = 2 OR i = 6 OR i = 10. 40 CLEAR:cword. 41 IF curnt_off = 0. 42 CLEAR:weight. 43 ENDIF. 44 ELSEIF lastd = 0. 45 CLEAR:cword,weight. 46 ELSE. 47 CLEAR:weight. 48 ENDIF. 49 ENDIF. 50 CONCATENATE cword weight ev_money INTO ev_money. 51 lastd = curntd. 52 SUBTRACT 1 FROM curnt_off. 53 ADD 1 TO units_off. 54 ENDWHILE. 55 56 57 IF ev_money NS '分'. 58 CONCATENATE ev_money '整' INTO ev_money. 59 ELSE. 60 cword = ev_money. 61 IF cword = '零'. 62 SHIFT ev_money BY 1 PLACES. 63 ENDIF. 64 ENDIF.
社会很单纯,复杂的是人
分类:
FICO
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏