The following function is a sample of the Microsoft Visual Basic source code that is included within the professional edition of the Entisoft Tools. Please note that the source code is NOT included with the standard edition. This function spells out a numeric amount in English words; it is part of the text processing class within the Entisoft Tools library.
Public Function SpellCurrency( _ ByVal vvarDollars As Variant _ , Optional ByVal vvarSpellTheCents As Variant _ ) As Variant ' Accepts a number representing currency, and returns the value written in words. ' For example: ' SpellCurrency(34.23, False) = "Thirty-four and 23/100 Dollars" ' or ' SpellCurrency(34.23, True) = "Thirty-four Dollars and Twenty-three Cents" Const European = False If IsNull(vvarDollars) Then SpellCurrency = Null Exit Function ElseIf Not estV.FixUpVariantToCurrencyMaybeFn(vvarDollars) Then SpellCurrency = "" Exit Function 'Note: Function only handles values between -1E36 and 1E36 exclusive. ElseIf vvarDollars <= -1E+36 Or vvarDollars >= 1E+36 Then SpellCurrency = "Overflow" Exit Function End If ' Assume that cents will NOT be spelled-out. estV.FixUpVariantToIntegerMaybeSub vvarSpellTheCents, False Static astrSuffixes(0 To 11) As String If astrSuffixes(1) <> "Thousand" Then If Not European Then astrSuffixes(0) = "" astrSuffixes(1) = " Thousand" astrSuffixes(2) = " Million" astrSuffixes(3) = " Billion" astrSuffixes(4) = " Trillion" astrSuffixes(5) = " Quadrillion" astrSuffixes(6) = " Quintillion" astrSuffixes(7) = " Sextillion" astrSuffixes(8) = " Septillion" astrSuffixes(9) = " Octillion" astrSuffixes(10) = " Nonillion" astrSuffixes(11) = " Decillion" Else astrSuffixes(0) = "" astrSuffixes(1) = " Thousand" astrSuffixes(2) = " Million" astrSuffixes(3) = " Milliard" astrSuffixes(4) = " Billion" astrSuffixes(5) = " Thousand Billion" astrSuffixes(6) = " Trillion" astrSuffixes(7) = " Thousand Trillion" astrSuffixes(8) = " Quadrillion" astrSuffixes(9) = " Thousand Quadrillion" astrSuffixes(10) = " Quintillion" astrSuffixes(11) = " Thousand Quintillion" End If End If Dim dblDollars As Double dblDollars = Fix(Abs(vvarDollars)) Dim intCents As Integer intCents = (Abs(vvarDollars) - dblDollars) * 100 Dim strResult As String If dblDollars = 0 Then If vvarSpellTheCents Then strResult = "Zero " ElseIf dblDollars >= 1100# And dblDollars < 2000# Then ' Handle numbers in this range as a special case--write-out something like "Twelve Hundred ...." If dblDollars Mod 100 <> 0 Then strResult = SpellThreeDigitInteger(dblDollars Mod 100) + " " + strResult End If strResult = SpellThreeDigitInteger(dblDollars \ 100) + " Hundred " + strResult dblDollars = dblDollars Mod 100 ElseIf dblDollars > 0 Then ' Otherwise, examine every set of three digits, starting with the least significant. Dim intKSets As Integer For intKSets = 0 To (Fix(estM.LogNReal(dblDollars, 10)) \ 3) Dim dblCurValue As Double dblCurValue = dblDollars - Int(dblDollars / 1000#) * 1000# dblDollars = Int(dblDollars / 1000#) If dblCurValue <> 0 Then strResult = SpellThreeDigitInteger(dblCurValue) + astrSuffixes(intKSets) + " " + strResult End If Next intKSets End If ' Add "and xx/100 Cents", if appropriate. If Not vvarSpellTheCents And intCents <> 0 Then If Fix(vvarDollars) <> 0 Then strResult = strResult + "and " strResult = strResult + Format$(intCents, "0") + "/100 " End If If vvarSpellTheCents And Fix(Abs(vvarDollars)) = 1 Or Abs(vvarDollars) = 1 Then strResult = strResult + "Dollar" Else strResult = strResult + "Dollars" End If If vvarSpellTheCents And intCents <> 0 Then strResult = strResult + " and " + SpellThreeDigitInteger(intCents) If intCents = 1 Then strResult = strResult + " Cent" Else strResult = strResult + " Cents" End If End If ' Prefix string with the word "Negative", if appropriate. If vvarDollars < 0 Then strResult = "Negative " + strResult SpellCurrency = strResult End Function
Return to the Entisoft Tools Page
Return to the Entisoft Home Page
Copyright © 1998
Entisoft. All Rights Reserved.