Thursday, 24 November 2016

How To Convert Number To Words In Visual Foxpro 9.0

I created these funtions a long time ago, but I believe that there are still a number of software developers out there who are using VFP as their primary or secondary programming language.

To use this, save all these codes in a singe PRG file. To call the function anywhere in your VFP program, use this syntax:

=strTran(NumToWord(Numeric),'Dollar','')


or


? strTran(NumToWord(1000),'Dollar','')


Have fun!

 ****************************************  
 * Demo on converting number to words  
 * Primary usage: Philippine Local Checks  
 * Author: Glen T. Villar  
 * Date Created: January 13, 2009  
 *****************************************  
 *!*     ? strTran(NumToWord(1),'Dollar','')  
   
   
 Function NumToWord(Par1 As Long)  
  If Mod(Par1,1) > 0  
  m.lcNewItem = FixItUp(Par1)+' Dollar and '+Alltrim(FixItUp(MOD(Par1,1)*100))+' Cents'  
  Else  
  m.lcNewItem = FixItUp(Par1)+' Dollar'  
  Endif  
   
  Return (m.lcNewItem)  
 Endfunc  
   
   
 Function FixItUp(Param1 As Long)  
 ****************************************  
 *  Author: Glen T. Villar  
 *  Function for Converting Number to Words  
 *  Primary usage: Philippine Local Checks  
 *  Secondary usage: American Local Checks  
 *  Date Created: January 13, 2009  
 *  Date Modified: August 8, 2009  
 *****************************************  
  If !Empty(Param1)  
  Dimension lArray[6]  
  Local lcAnswer, nReiterate, lnLeftSide, lcWord, lcConcatenate, ;  
   lnMove, lcTaken, lcWordsExt  
  If !Empty(Param1)  
   lcLeftPart = Alltrim(Transform(Int(Param1)))  
   lnRightPart = Mod(Param1,1)  
   lnLeftSide = Len(m.lcLeftPart)  
   nReiterate = 0  
   For lnVar = 1 To Int(m.lnLeftSide/3)  
   lnLeftSide = lnLeftSide - 3  
   nReiterate = nReiterate + 1  
   Endfor  
   
   lcOnes = '1One,2Two,3Three,4Four,5Five,6Six,7Seven,8Eight,9Nine,'  
   lcTees = '10Ten,11Eleven,12Twelve,13Thirteen,14Fourteen,15Fifteen,16Sixteen,17Seventeen,18Eighteen,19Nineteen,'  
   lcTens = '2Twenty,3Thirty,4Forty,5Fifty,6Sixty,7Seventy,8Eighty,9Ninety,'  
   lcTitle = '2Thousand,3Million,4Billion,5Thrillion,6Quadrillion,'  
   
   lnMove = m.nReiterate * 3  
   lcParam = Alltrim(Right(m.lcLeftPart,m.lnMove))  
   lcClassify = ''  
   lcClassify = Iif(Between(Mod(Val(Alltrim(Left(m.lcLeftPart,m.lnLeftSide)))/100,1) * 100,1,9), Strextract(m.lcOnes,Alltrim(Left(m.lcLeftPart,m.lnLeftSide)),','), ;  
   IIF(Between(Mod(Val(Alltrim(Left(m.lcLeftPart,m.lnLeftSide)))/100,1) * 100,10,19), Strextract(m.lcTees,Alltrim(Left(m.lcLeftPart,m.lnLeftSide)),','), ;  
   IIF(Between(Mod(Val(Alltrim(Left(m.lcLeftPart,m.lnLeftSide)))/100,1) * 100,20,99), Strextract(m.lcTens,Alltrim(Left(m.lcLeftPart,1)),',')+Space(1)+ ;  
   Strextract(m.lcOnes,Alltrim(Substr(m.lcLeftPart,2,1)),','),'')))  
   
   For lnVar = 1 To m.nReiterate  
   lnMove = m.lnMove-3  
   lcTaken = Substr(lcParam,m.lnMove+1,3)  
   
   If Mod((Val(m.lcTaken)/100),1) * 100 > 19  
    lcConcatenate = Strextract(m.lcOnes,Alltrim(Left(m.lcTaken,1)),',')+Iif(Alltrim(Left(m.lcTaken,1))<>'0',' Hundred ','')+ ;  
    Strextract(m.lcTens,Alltrim(Substr(m.lcTaken,2,1)),',')+Space(1)+Strextract(m.lcOnes,Alltrim(Right(m.lcTaken,1)),',')  
   Else  
    lcConcatenate = Strextract(m.lcOnes,Alltrim(Left(m.lcTaken,1)),',')+ Iif(Alltrim(Left(m.lcTaken,1))<>'0',' Hundred ','')+;  
    Strextract(m.lcTees,Alltrim(Substr(m.lcTaken,2,2)),',')+Iif(Mod(Val(m.lcTaken)/100,1) * 100 < 11,Strextract(m.lcOnes,Alltrim(Right(m.lcTaken,1)),','),;  
    Strextract(m.lcTens,Alltrim(Substr(m.lcTaken,2,2)),','))  
   Endif  
   lArray[lnVar] = m.lcConcatenate + Space(1) + Strextract(m.lcTitle,Alltrim(Str(m.lnVar)),',')  
   Endfor  
   
   lcWordsExt = ''  
   For nVal = m.nReiterate To 1 Step -1  
   lcWordsExt = lcWordsExt + Space(1) + ;  
    Iif(Getwordcount(lArray[nVal])=1 And Inlist(Upper(Alltrim(lArray[nVal])),'THOUSAND','MILLION'),'',lArray[nVal])  
   Endfor  
   
   lcNewWord = ''  
   lnNewVal = Val(Left(Alltrim(Strextract(Transform(m.lnRightPart),'.','')),2))  
   
   lcNewWord = m.lcClassify + Space(1)+;  
   IIF(!Empty(m.lcClassify),Alltrim(Right(Getwordnum(m.lcTitle,m.nReiterate,','),Len(Getwordnum(m.lcTitle,m.nReiterate,','))-1)),'');  
   +Space(1)+;  
   Alltrim(m.lcWordsExt)  
   
   Return Alltrim(m.lcNewWord)  
  Endif  
  Else  
  Return ''  
  Endif  
 Endfunc  

1 comment:

Related Posts Plugin for WordPress, Blogger...