Entisoft Tools Source Code Sample

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 ENTISOFT Home Page

Copyright 1999-2005 Entisoft