Microsoft KB Archive/168895

From BetaArchive Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Knowledge Base


How To Convert Numeric Dollar Amount to Character Form

Article ID: 168895

Article Last Modified on 6/29/2004



APPLIES TO

  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition



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.

Keywords: kbhowto kbcode KB168895