Snippet
Module Module1
Sub Main()
' Console.Write(WriteNumber(1234567890))
Console.WriteLine(WriteNumber(987654321012345678))
For i As Long = 99999999 To 100000001
Console.WriteLine(i.ToString & vbTab & "[" & WriteNumber(i) & "]")
Next
Console.ReadKey()
End Sub
Dim nums() As String = { _
"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", _
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Ninteen" _
}
Dim tens() As String = {"", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninty"}
Public Function WriteNumber(ByVal Number As Long, Optional ByVal Level As Long = 0) As String
If (Level = 0) And (Number = 0) Then Return "Zero"
If (Level > 0) And (Number = 0) Then Return ""
If Number < 0 Then Return "Negative " & WriteNumber(Math.Abs(Number))
Select Case Number
Case Is < 20 : Return nums(Number) & " "
Case 20 To 99 : Return tens(Number \ 10) & " " & WriteNumber(Number Mod 10, Level + 1)
Case 100 To 999 : Return nums(Number \ 100) & " Hundred " & IIf(((Number Mod 1000) = 0), "and ", "") & WriteNumber(Number Mod 100, Level + 1)
Case 1000 To 999999 : Return WriteNumber(Number \ 1000, Level + 1) & "Thousand " & IIf(Number Mod 1000 = 0, "", " ") & WriteNumber(Number Mod 1000, Level + 1)
Case 10 ^ 6 To 10 ^ 12 - 1 : Return WriteNumber(Number \ 10 ^ 6, Level + 1) & "Million " & IIf(Number Mod 10 ^ 6 = 0, "", " ") & WriteNumber(Number Mod 10 ^ 6, Level + 1)
Case Is >= 10 ^ 12 : Return WriteNumber(Number \ 10 ^ 12, Level + 1) & "Billion " & IIf(Number Mod 10 ^ 12 = 0, "", " ") & WriteNumber(Number Mod 10 ^ 12, Level + 1)
End Select
Return ""
End Function
End Module
Copy & Paste
|