Code Snippet
Function numbers_in_english(ByVal number_to_translate As Int32) As String
' special case, not yet for negative numbers
If
number_to_translate < 0 Then
Return
"Please enter only positive numbers!" ElseIf
number_to_translate = 0 Then
Return
"zero" End
If
' No more special cases! no more returns!
Dim
number_as_string As
String
= "" ' This is the string we will return
' These array are used to look up english words for numbers, Since array is zero- based, fill "0:th place" with dummy value
Dim
ones_place As
String
() = {"zero_never_used", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}Dim
tens_place As
String
() = {"zero_never_used", "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"}Dim
teenagers As
String
() = {"zero_never_used", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}' >1 000 000 digits_to_convert is the part of number_to_translate right now.
Dim
digits_to_convert As
Int32 = number_to_translate \ 1000000 ' How many millions?
' reminder is how much of number_to_convert we still have left to convert
Dim
reminder As
Int32 = number_to_translate - digits_to_convert * 1000000 ' Subtract of those millions
If
digits_to_convert > 0 Then
' Now here is the recursion - build up the million string
number_as_string &= numbers_in_english(digits_to_convert) &
" million" If
reminder > 0 Then
number_as_string &= " " ' So we don't write as millionone
End
If
' 1000 - 9999 digits_to_convert is the part of number_to_translate right now.
digits_to_convert = reminder \ 1000
' How many thousands left
reminder = reminder - digits_to_convert * 1000
' Subtract of those
thousands If
digits_to_convert > 0 Then
' Now here is the recursion - build up the tousend string
number_as_string &= numbers_in_english(digits_to_convert) &
" thousand" If
reminder > 0 Then
number_as_string &= " " ' So we don't write as thousandone
End
If
' 100 - 999 digits_to_convert is the part of number_to_translate right now.
digits_to_convert = reminder \ 100
' How many hundreds?
' reminder is how much of number_to_convert we still have left to convert
reminder = reminder - digits_to_convert * 100
' Subtract of those hundreds
If
digits_to_convert > 0 Then
' Now here is the recursion - build up the hundred string
number_as_string &= numbers_in_english(digits_to_convert) &
" hundred" If
reminder > 0 Then
number_as_string &= " " ' So we don't write as 'twohundredfifty-one'
End
If
digits_to_convert = reminder \ 10
' How many tens left
reminder = reminder - digits_to_convert * 10
' Subtract of those teens
If
digits_to_convert > 0 Then
If
digits_to_convert = 1 And
reminder > 0 Then
' 11 ...19
' Since we can't write 'teenty-two' instead of twelve we have to make a special exception
number_as_string &= teenagers(reminder)
' Since we took care of all digits in reminder already, we have nothing left to convert
reminder = 0
Else
' 20 ...99
number_as_string &= tens_place(digits_to_convert)
End
If
' so we don't write 'sixtyfour'
If
reminder > 0 Then
number_as_string &= "-" End
If
' Only single digits left in reminder to convert, do it if it is larger than zero
If
reminder > 0 Then
number_as_string &= ones_place(reminder)' ready!
Return
number_as_stringEnd
Function
' of numbers_in_english