*&---------------------------------------------------------------------*
*& Report ZCONVERTNUMBERTOWORDS
*&
*&---------------------------------------------------------------------*
*& Convert number to words
*&
*&---------------------------------------------------------------------*
REPORT ZCONVERTNUMBERTOWORDS.
PARAMETERS: num TYPE i.
Data amt_in_num TYPE i.
Data words TYPE String.
Data final TYPE integer.
Data amt_in_words TYPE integer.
amt_in_num = num.
PERFORM convertIntoWords.
write: words.
Form convertIntoWords.
data: maxno type p.
maxno = 10 ** 9.
if ( amt_in_num >= maxno ).
raise data_type_mismatch.
endif.
*data declaration-------------------------------------------------*
data: ten(10),single(6),final(130),dec(20),res type i,rp(7).
data: a1 type i,a2 type i,str(20),d type p,m type i,wrdrep(20).
data: cntr type i,f1 type i,f2 type i,f3 type i,f4 type i,f5 type i.
data: f6 type i,f7 type i,f8 type i,f9 type i.
d = ( amt_in_num * 100 ) div 100.
res = ( amt_in_num * 100 ) mod 100.
f1 = res div 10.
f2 = res mod 10.
perform setnum using f1 f2 changing wrdrep.
f1 = 0. f2 = 0.
dec = wrdrep.
cntr = 1.
*Go in a loop dividing the numbers by 10 and store the
*residues as a digit in f1 .... f9
while ( d > 0 ).
m = d mod 10.
d = d div 10.
case cntr.
when 1. f1 = m.
when 2. f2 = m.
when 3. f3 = m.
when 4. f4 = m.
when 5. f5 = m.
when 6. f6 = m.
when 7. f7 = m.
when 8. f8 = m.
when 9. f9 = m.
endcase.
cntr = cntr + 1.
endwhile.
cntr = cntr - 1.
*Going in loop and sending pair of digits to function setnum to get
*the standing value of digits in words
while ( cntr > 0 ).
if ( cntr <= 2 ).
perform setnum using f2 f1 changing wrdrep.
concatenate final wrdrep into final separated by ' '.
elseif ( cntr = 3 ).
if ( f3 <> 0 ).
perform setnum using 0 f3 changing wrdrep.
concatenate final wrdrep 'HUNDRED' into final separated by ' '.
endif.
elseif ( cntr <= 5 ).
if ( f5 <> 0 ) or ( f4 <> 0 ).
perform setnum using f5 f4 changing wrdrep.
concatenate final wrdrep 'THOUSAND' into final separated by ' '
.
endif.
if ( cntr = 4 ).
cntr = 5.
endif.
elseif ( cntr <= 7 ).
if ( f7 <> 0 ) or ( f6 <> 0 ).
perform setnum using f7 f6 changing wrdrep.
concatenate final wrdrep 'LAKH' into final separated by ' ' .
endif.
elseif ( cntr <= 9 ).
perform setnum using f9 f8 changing wrdrep.
concatenate final wrdrep 'CRORE' into final separated by ' ' .
endif.
cntr = cntr - 2.
endwhile.
*Output the final
if ( final = ' ONE' ).rp = 'Taka'(003).else. rp = 'Taka'(001).endif
.
if ( final = '' ) and ( dec = '' ).
final = 'NIL'.
elseif ( final = '' ).
concatenate dec 'Paise'(002) into final separated by ' ' .
elseif ( dec = '' ).
concatenate final rp into final separated by ' ' .
else.
concatenate final rp dec 'Paise'(002) into final separated by ' ' .
endif.
words = final.
endform.
*&---------------------------------------------------------------------*
*& Form SETNUM
*&---------------------------------------------------------------------*
* converts a number into words *
*----------------------------------------------------------------------*
* --> a1,a2 two digits for 2nd and 1st place
* <-- str outpur in words
*----------------------------------------------------------------------*
data: ten(10),single(6),str(20).
*
form setnum using a1 a2 changing str.
ten = ''.single = ''.
if ( a1 = 1 ).
case a2.
when 0. ten = 'TEN'.
when 1. ten = 'ELEVEN'.
when 2. ten = 'TWELVE'.
when 3. ten = 'THIRTEEN'.
when 4. ten = 'FOURTEEN'.
when 5. ten = 'FIFTEEN'.
when 6. ten = 'SIXTEEN'.
when 7. ten = 'SEVENTEEN'.
when 8. ten = 'EIGHTEEN'.
when 9. ten = 'NINETEEN'.
endcase.
else.
case a2.
when 1. single = 'ONE'.
when 2. single = 'TWO'.
when 3. single = 'THREE'.
when 4. single = 'FOUR'.
when 5. single = 'FIVE'.
when 6. single = 'SIX'.
when 7. single = 'SEVEN'.
when 8. single = 'EIGHT'.
when 9. single = 'NINE'.
endcase.
case a1.
when 2. ten = 'TWENTY'.
when 3. ten = 'THIRTY'.
when 4. ten = 'FORTY'.
when 5. ten = 'FIFTY'.
when 6. ten = 'SIXTY'.
when 7. ten = 'SEVENTY'.
when 8. ten = 'EIGHTY'.
when 9. ten = 'NINETY'.
endcase.
endif.
if ( single <> '' ) and ( ten <> '' ).
concatenate ten single into str separated by ' '.
elseif single = ''.
str = ten.
else.
str = single.
endif.
endform.