How To Convert Numeric Dollar Amount to Character Form (168895)



The information in this article applies to:

  • Microsoft Visual FoxPro for Windows 3.0
  • Microsoft Visual FoxPro for Windows 3.0b
  • Microsoft Visual FoxPro for Windows 5.0
  • Microsoft Visual FoxPro for Windows 5.0a
  • Microsoft Visual FoxPro for Windows 6.0

This article was previously published under Q168895

SUMMARY

This article illustrates how you can convert a numeric dollar amount to character form.

MORE INFORMATION

The following function spells out the numeric dollar amount.

NOTE: The function below only converts numeric values from .01 to 999,999,999.99 to character form.
   *******************
   * NumToWord Function
   *******************
   PARAMETER numAmt

   PRIVATE numAmt, chrAmt, cDNums, wordAmt, cDvar

   *numAmt = Value to spell out
   *chrAmt = numAmt converted to char
   *wordAmt = spelled out version of numAmt

   *Covert amount to string, add leading zeros

   chrAmt=RIGHT('000000000'+LTRIM(STR(numAmt,12,2)),12)

   *Initialize literal string

   Dol1 = 'ONE'
   Dol2 = 'TWO'
   Dol3 = 'THREE'
   Dol4 = 'FOUR'
   Dol5 = 'FIVE'
   Dol6 = 'SIX'
   Dol7 = 'SEVEN'
   Dol8 = 'EIGHT'
   Dol9 = 'NINE'
   Dol10 = 'TEN'
   Dol11 = 'ELEVEN'
   Dol12 = 'TWELVE'
   Dol13 = 'THIRTEEN'
   Dol14 = 'FOURTEEN'
   Dol15 = 'FIFTEEN'
   Dol16 = 'SIXTEEN'
   Dol17 = 'SEVENTEEN'
   Dol18 = 'EIGHTEEN'
   Dol19 = 'NINETEEN'
   Dol20 = 'TWENTY'
   Dol30 = 'THIRTY'
   Dol40 = 'FORTY'
   Dol50 = 'FIFTY'
   Dol60 = 'SIXTY'
   Dol70 = 'SEVENTY'
   Dol80 = 'EIGHTY'
   Dol90 = 'NINETY'

   wordAmt=''
   IsHundred = .F.
   checkMillion =.T.

   FOR Counter = 1 TO 3

   * First time through the For loop to check for millions
   * Second time through the FOR loop to check for thousands
   * Third time through the FOR loop to check for hundreds, tens and ones


      DO CASE
        CASE Counter = 1
           cDNums = SUBSTR(chrAmt,1,3)
        CASE Counter = 2
           cDNums = SUBSTR(chrAmt,4,3)
        CASE Counter = 3
           cDnums = SUBSTR(chrAmt,7,3)
      ENDCASE


   * Check hundreds

      IF LEFT(cDNums, 1) > '0'
         cDvar = 'Dol'+LEFT(cDNums,1)
         wordAmt = wordAmt + EVAL(cDvar)+SPACE(1)+'HUNDRED'+SPACE(1)
         IsHundred = .T.
         IF Counter = 2
            CheckMillion = .T.
         ENDIF
      ENDIF

   * Check tens and ones

      Dtens = VAL(SUBSTR(cDNums,2,2))
      IF Dtens > 0
         IF Dtens > 20
            cDvar = 'Dol'+SUBSTR(cDNums,2,1)+'0'
            wordAmt = wordAmt + EVAL(cDvar)
            IF SUBSTR(cDNums,3,1) > '0'
               cDvar = 'Dol'+SUBSTR(cDNums,3,1)
               wordAmt = wordAmt + '-'+ EVAL(cDvar) + SPACE(1)
            ELSE
               wordAmt = wordAmt + SPACE(1)
            ENDIF
         ELSE
            cDvar = 'Dol'+LTRIM(STR(Dtens))
            wordAmt = wordAmt + EVAL(cDvar) + SPACE(1)
         ENDIF
         IsHundred = .F.
         IF Counter = 2
            CheckMillion = .T.
         ENDIF
      ENDIF

   * Add in Million, if needed
      IF numAmt > 999999.99 .AND. Counter = 1
         wordAmt = wordAmt + SPACE(1)+'MILLION'+SPACE(1)
         CheckMillion = .F.
      ENDIF


   * Add in Thousand, if needed
      IF CheckMillion
         IF numAmt > 999.99 .AND. Counter = 2
            IF Dtens > 0
               wordAmt = wordAmt + SPACE(1)+'THOUSAND'+SPACE(1)
            ENDIF
            IF IsHundred
               wordAmt = wordAmt + SPACE(1)+'THOUSAND'+SPACE(1)
            ENDIF
         ENDIF
      ENDIF

   ENDFOR

   * Construct the complete dollar amount in words

   wordAmt = IIF(numAmt<1, 'ONLY'+SPACE(1), wordAmt + 'AND'+SPACE(1)) + ;
   RIGHT(chrAmt,2)+'/100 ' + 'DOLLAR' + IIF(numAmt>1,'S','')

   RETURN wordAmt
				

SAMPLE

Here is a small sample that uses the above function.
  1. Create a form in Visual FoxPro.
  2. Add a custom method to the form, named it as NumToWord. Go to the NumToWord method, and paste the above function into it.
  3. Add a TextBox control to the form, and set the following properties:
         Value=0
         InputMask = 999,999,999.99
  4. In the Valid event of the TextBox control, put in the following code:
         Thisform.label1.Caption = Thisform.NumToWord(Thisform.Text1.Value)
  5. Add a Label to the form, and set the following properties:
         WordWrap = .T.
         Width   = 200
         Height   = 35
    						
  6. Save and run the form.
RESULT: Type 1000.00 into the text box. "ONE THOUSAND AND 00/100 DOLLARS" appears in the form.

Modification Type:MinorLast Reviewed:6/29/2004
Keywords:kbcode kbhowto KB168895 kbAudDeveloper