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 (please do not use commas):
? NumToWord(12437.95)
To use this, save all these codes in a singe PRG file. To call the function anywhere in your VFP program, use this syntax (please do not use commas):
? NumToWord(12437.95)
****************************************
* Demo on converting number to words
* Primary usage: Philippine Local Checks
* Author: Glen T. Villar
* Date Created: January 13, 2009
* Code Updated: 12 April 2019
*****************************************
Function NumToWord(Par1 As Long)
If Mod(Par1,1) > 0
m.lcNewItem = FixItUp(Par1)+' Dollar and '+FixItUp(VAL(RIGHT(TRANSFORM(Par1,"9999999999999999999.99"),2)))+' 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
* Date Modified: April 12, 2019
*****************************************
If !Empty(Param1)
Dimension lArray[6]
Local lcAnswer, nReiterate, lnLeftSide, lcWord, lcConcatenate, ;
lnMove, lcTaken, lcWordsExt
If !Empty(Param1)
lcLeftPart = Alltrim(Transform(Int(Param1)))
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 = ''
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