要求如下 :万元以上的 需要用缩写后尾* 如:
123765.39 -------1 hndrd 23 thsnd 7 hndrd 65 and 39/100**********************************************
万元以下 后尾*
136.38 ------One Hundred Thirty-Six and 39/100***************************************************
万元以上的 自己写算法解决;万元以下的 利用系统函数再加以转换
FUNCTION 'SPELL_AMOUNT'
这个函数 在有小数位情况下转换出来的不是预期的数 需要转换整数 转换后 再把大小写用算法搞定即可
需要注意的 地方 sring 的赋值时候 不支持 +() 这种方法
*&---------------------------------------------------------------------*
*& Report ZT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zt.
*DATA text TYPE string.
DATA outd(256).
DATA outc(256).
DATA outa(256).
DATA outb(256).
DATA out TYPE string.
DATA str TYPE TABLE OF string WITH HEADER LINE.
DATA strchar(20).
DATA outt(200) .
DATA fen(3).
DATA : BEGIN OF itab,
a(3),
b(3),
c(3),
d(3),
END OF itab..
DATA: long TYPE i,banlance TYPE i..
PARAMETERS: text(18).
*text = '123456789.99'.
SPLIT text AT '.' INTO text fen.
itab = text.
long = STRLEN( text ).
* banlance = 3 - long mod 3.
IF long > 5.
banlance = 12 - long.
WRITE / itab.
IF banlance <> 0.
SHIFT text BY banlance PLACES RIGHT.
ENDIF.
itab = text.
WRITE / itab.
*$123,456,789.56
*
*1hndrd 23 mil 4 hndrd 56 thsnd 7 hndrd 89 and 56/100
IF itab-a <> ' '.
PERFORM there USING itab-a outa.
CONCATENATE outa out INTO out SEPARATED BY ' '.
ENDIF.
IF itab-b <> ' '.
PERFORM there USING itab-b outb.
CONCATENATE out outb 'mil' INTO out SEPARATED BY ' '.
ENDIF.
IF itab-c <> ' '.
PERFORM there USING itab-c outc.
CONCATENATE out outc 'thsnd' INTO out SEPARATED BY ' '.
ENDIF.
IF itab-d <> ' '.
PERFORM there USING itab-d outd.
CONCATENATE out outd INTO out SEPARATED BY ' '.
ENDIF.
WRITE: / outa ,outb ,outc,outd.
WRITE: / out.
ELSE.
DATA outn TYPE spell.
CALL FUNCTION 'SPELL_AMOUNT'
EXPORTING
amount = text
currency = ' '
filler = ' '
language = sy-langu
IMPORTING
in_words = outn
EXCEPTIONS
not_found = 1
too_large = 2
OTHERS = 3.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
out = outn-word.
WRITE: / out.
SPLIT out AT space INTO TABLE str.
CLEAR out.
DATA pos TYPE i.
DATA char.
LOOP AT str.
strchar = str.
CALL FUNCTION 'STRING_UPPER_LOWER_CASE'
EXPORTING
delimiter = 'A'
string1 = strchar
IMPORTING
string = strchar
EXCEPTIONS
not_valid = 1
too_long = 2
too_small = 3
OTHERS = 4.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SEARCH strchar FOR '-'.
IF sy-subrc = 0.
pos = sy-fdpos + 1.
char = strchar+pos(1).
TRANSLATE char TO UPPER CASE.
strchar+pos(1) = char.
ENDIF.
str = strchar.
CONCATENATE out str
INTO out SEPARATED BY space.
ENDLOOP.
ENDIF.
SHIFT fen BY 1 PLACES RIGHT.
CONCATENATE out ' and' fen '/100' INTO out .
outt = '*************************************************************************************'.
long = STRLEN( out ).
outt(long) = out.
WRITE: / outt.
*&---------------------------------------------------------------------*
*& Form there
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IN text
* -->OUT text
*----------------------------------------------------------------------*
FORM there USING in out
.
DATA len TYPE i.
len = STRLEN( in ).
out = in(1).
IF out <> ' '.
out = ' '.
len = STRLEN( out ).
out+0(1) = in(1).
out+1(7) = ' hndrd '.
out+8(2) = in+1(2).
ELSE.
out = in.
ENDIF.
* if len <> 3.
* out = in .
* else .
* out = in(1).
* out+1(3) = ' bai '.
* out+4(2) = in+1(2).
*
*
* endif.
ENDFORM. "there