Skip to content

Instantly share code, notes, and snippets.

@emaillenin
Last active December 15, 2015 11:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save emaillenin/5254022 to your computer and use it in GitHub Desktop.
Save emaillenin/5254022 to your computer and use it in GitHub Desktop.
Converts a number (a currency) into words for Indian Format.. Supports upto 9 Digits.
Public Function convertNumberToWordsForIndia9Digits(ByVal number As Decimal)
'Based on this - http://www.php.net/manual/en/function.number-format.php#108532
'If you know the C# version, share it here http://blog.emaillenin.com
Dim words As New Hashtable
words.Add("0", "")
words.Add("1", "One")
words.Add("2", "Two")
words.Add("3", "Three")
words.Add("4", "Four")
words.Add("5", "Five")
words.Add("6", "Six")
words.Add("7", "Seven")
words.Add("8", "Eight")
words.Add("9", "Nine")
words.Add("10", "Ten")
words.Add("11", "Eleven")
words.Add("12", "Twelve")
words.Add("13", "Thirteen")
words.Add("14", "Fourteen")
words.Add("15", "Fifteen")
words.Add("16", "Sixteen")
words.Add("17", "Seventeen")
words.Add("18", "Eighteen")
words.Add("19", "Nineteen")
words.Add("20", "Twenty")
words.Add("30", "Thirty")
words.Add("40", "Forty")
words.Add("50", "Fifty")
words.Add("60", "Sixty")
words.Add("70", "Seventy")
words.Add("80", "Eighty")
words.Add("90", "Ninety")
Dim number_string As String = Decimal.Truncate(number).ToString
Dim number_length As Integer = number_string.Length
Dim number_array As New List(Of Integer) From {0, 0, 0, 0, 0, 0, 0, 0, 0}
Dim received_number_array As New List(Of Integer)(number_length - 1)
For i As Integer = 0 To number_length - 1
received_number_array.Add(number_string.Substring(i, 1))
Next
Dim j As Integer = 0
For i = 9 - number_length To 9 - 1
number_array.Item(i) = received_number_array.Item(j)
j += 1
Next
Dim number_to_words_string As String = ""
'Finding out whether it is teen ? and then multiplying by 10, example 17 is seventeen, so if 1 is preceeded with 7 multiply 1 by 10 and add 7 to it.
j = 1
For i As Integer = 0 To 9 - 1
If i = 0 Or i = 2 Or i = 4 Or i = 7 Then
If number_array.Item(i) = "1" Then
number_array.Item(j) = 10 + number_array.Item(j)
number_array.Item(i) = 0
End If
End If
j += 1
Next
Dim value As Integer
For i As Integer = 9 - number_length To 9 - 1
If i = 0 Or i = 2 Or i = 4 Or i = 7 Then
If i = 7 And Not number_array.Item(i) = 0 And number_length > 2 Then
number_to_words_string &= "and "
End If
value = number_array.Item(i) * 10
ElseIf i = 8 And Not number_array.Item(i) = 0 And number_array.Item(i - 1) = 0 And number_length > 2 Then
number_to_words_string &= "and "
value = number_array.Item(i)
Else
value = number_array.Item(i)
End If
If Not value = 0 Then
number_to_words_string &= words.Item(value.ToString) & " "
End If
If Not i = 0 Then
If i = 1 Then
number_to_words_string &= "Crores "
End If
If i = 3 Then
If number_length <= 6 Then
number_to_words_string &= "Lakhs "
Else
If Not number_array.Item(i - 1) = 0 Or (number_array.Item(i) >= 10 And number_array.Item(i) <= 20) Then
number_to_words_string &= "Lakhs "
End If
End If
number_to_words_string &= " "
End If
If i = 5 Then
If number_length <= 4 Then
number_to_words_string &= "Thousand "
Else
If Not number_array.Item(i - 1) = 0 Or (number_array.Item(i) >= 10 And number_array.Item(i) <= 20) Then
number_to_words_string &= "Thousand "
End If
End If
End If
If i = 6 Then
If number_length <= 3 Then
number_to_words_string &= "Hundred "
Else
If Not number_array.Item(i) = 0 Then
number_to_words_string &= "Hundred "
End If
End If
End If
End If
Next
Return number_to_words_string
End Function
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment