Microsoft KB Archive/168895

= 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.  Create a form in Visual FoxPro. Add a custom method to the form, named it as NumToWord. Go to the NumToWord method, and paste the above function into it.  Add a TextBox control to the form, and set the following properties: Value=0 InputMask = 999,999,999.99   In the Valid event of the TextBox control, put in the following code: Thisform.label1.Caption = Thisform.NumToWord(Thisform.Text1.Value)   Add a Label to the form, and set the following properties: WordWrap = .T.    Width   = 200 Height  = 35  Save and run the form.</ol>

RESULT: Type 1000.00 into the text box. "ONE THOUSAND AND 00/100 DOLLARS" appears in the form.

Keywords: kbhowto kbcode KB168895

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.