Module Nums2Words

    
Private levels() As String = {"", " Thousand ", " Million ", " Billion ", " Trillion "}

    
Public Function convert(ByVal inputNum As Integer) As String
        If 
inputNum = 0 Then Return "Zero"

        
Dim input As String = CStr(inputNum)
        
Dim output As String = ""
        
Dim pos As Integer = input.Length - 1
        
Dim chunk As String = ""
        
Dim level As Integer = 0

        
Do
            
chunk = input.Substring(pos, 1) & chunk
            
If chunk.Length = 3 Or pos = 0 Then
                
output = d(chunk) & levels(level) & output
                chunk 
= ""
                
level += 1
            
End If

            If 
pos = 0 Then Exit Do
            
pos -= 1
        
Loop

        Do
            If 
output.IndexOf("  ") <= 0 Then Exit Do
            
output = output.Replace("  ", " ")
        
Loop

        Return 
output
    
End Function

    Private Function 
d(ByVal inputNum As Integer) As String
        If 
inputNum = 0 Then Return ""

        
Dim input As String = CStr(inputNum)
        
Dim output As String = ""

        
If input.Length = 3 Then
            
output = convertZeroToNineteen(input.Substring(0, 1)) & "Hundred "
            
input = input.Substring(1)
        
End If

        Dim 
x As Integer = CInt(input)
        
If x < 20 Then
            
output &= convertZeroToNineteen(x)
        
Else
            
output &= convertTensDigit(input.Substring(0, 1))
            
If CInt(input.Substring(1)) > 0 Then
                
output = output.TrimEnd & "-" & convertZeroToNineteen(input.Substring(1)).TrimStart
            
Else
                
output &= convertZeroToNineteen(input.Substring(1))
            
End If
        End If

        Return 
output
    
End Function

    Private Function 
convertZeroToNineteen(ByVal inputNum As Integer) As String
        Select Case 
inputNum
            
Case 0 : Return ""
            
Case 1 : Return " One "
            
Case 2 : Return " Two "
            
Case 3 : Return " Three "
            
Case 4 : Return " Four "
            
Case 5 : Return " Five "
            
Case 6 : Return " Six "
            
Case 7 : Return " Seven "
            
Case 8 : Return " Eight "
            
Case 9 : Return " Nine "
            
Case 10 : Return " Ten "
            
Case 11 : Return " Eleven "
            
Case 12 : Return " Twelve "
            
Case 13 : Return " Thirteen "
            
Case 14 : Return " Fourteen "
            
Case 15 : Return " Fifteen "
            
Case 16 : Return " Sixteen "
            
Case 17 : Return " Seventeen "
            
Case 18 : Return " Eighteen "
            
Case 19 : Return " Nineteen "
        
End Select
        Return 
""
    
End Function

    Private Function 
convertTensDigit(ByVal inputNum As Integer) As String
        Select Case 
inputNum
            
Case 2 : Return " Twenty "
            
Case 3 : Return " Thirty "
            
Case 4 : Return " Forty "
            
Case 5 : Return " Fifty "
            
Case 6 : Return " Sixty "
            
Case 7 : Return " Seventy "
            
Case 8 : Return " Eighty "
            
Case 9 : Return " Ninety "
        
End Select
        Return 
""
    
End Function
End Module

Colorized by: CarlosAg.CodeColorizer