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.
View Code

 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.
View Code

 

posted @ 2022-10-19 11:04  年轻的小菜鸟  阅读(52)  评论(0编辑  收藏  举报