关于 英文的 金额转换

要求如下 :万元以上的 需要用缩写后尾* 如:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值