Introduction
This tip will explain how to convert a number to its equivalent word. For example, the number 1000 returns "One Thousand Only".
Background
Here, I have given the .NET code for conversion. I have tried to simplify the code for easy understanding.
Using the Code
This code is written in .NET. Simply copy and paste the full code into a new .NET class.
How It Works
There will be a dictionary
object for tens and hundreds represent ten digits and hundred digit and list for number 1 to 19. The method is named ConvertNumberAsText
. This accepts a parameter of type int
. First, the method will convert the number into string
and loop the string
from its starting position. From its start position, it checks whether the position exists in the hundred digit dictionary. If the position exists, it will get the single equivalent number from oneTo19List
and add hundred or thousand, etc. If position does not exist, then it will increment the position and get the number from oneTo19List
or the tendigit
dictionary and add hundred or thousand, etc. Like that, it constructs the word in loop and finally returns the equivalent word.
Implementation
Here is a complete class file which consists of all the code involved in converting the numbers to word. However, it has a limitation that it can handle only up to the number 10 crore which I think will cover most of your requirements. If you require more than 10 crore, then you need to modify the code yourself. And it is not difficult. Just add one more entry to the HundredDigit
dictionary collection below in the code.
static class Extension
{
public static int ToInt(this string str)
{
int output;
int.TryParse(str, out output);
return output;
}
}
static List<string> oneTo19Text = new List<string> {
"Zero", "One" , "Two", "Three", "Four",
"Five", "Six", "Seven", "Eight",
"Nine", "Ten" , "Eleven" , "Twelve",
"Thirteen", "Fourteen", "Fifteen" ,
"Sixteen" , "Seventeen", "Eighteen" , "Nineteen"
};
static Dictionary<int, string> tensDigit =
new Dictionary<int, string>()
{
{ 2,"Twenty"},
{ 3,"Thirty"},
{ 4,"Fourty"},
{ 5,"Fifty"},
{ 6,"Sixty"},
{ 7,"Seventy"},
{ 8,"Eighty"},
{ 9,"NineTy"}
};
static Dictionary<int, string> HundredDigit =
new Dictionary<int, string>()
{
{ 3,"Hundred"},
{ 4,"Thousand"},
{ 6,"Lakhs"},
{ 8,"Crore"}
};
public static string ConvertNumberAsText(int num)
{
int numberLength = num.ToString().Length;
string numberString = num.ToString();
int position = numberLength;
if (numberLength == 1)
return oneTo19Text[num];
string result = string.Empty;
int number = 0;
for (int startPosition = 0; startPosition < numberLength; startPosition++)
{
Dictionary<int,string> getHundtedWord = HundredDigit.Where(
p => p.Key == position).ToDictionary(p => p.Key, p => p.Value);
if (getHundtedWord.Count == 0)
{
number = numberString.Substring(startPosition, 1).ToInt();
if (number < 2)
{
number = numberString.Substring(startPosition, 2).ToInt();
startPosition++;
position--;
}
else
{
result += " " + tensDigit[number];
startPosition++;
position--;
number = numberString.Substring(startPosition, 1).ToInt();
}
result += " " + oneTo19Text[number];
if (position > 2)
result += " " + HundredDigit[position];
}
else
{
number = numberString.Substring(startPosition, 1).ToInt();
result += " " + oneTo19Text[number];
if (position > 2)
result += " " + HundredDigit[position];
}
position--;
}
return result;
}