Apr 8, 2010

HOW TO CONVERT DIGITS INTO WORD USING C# .NET

These methods explain how we can convert a numeric values into word.


public string ChangeToWords(string numb, bool isCurrency)

{

string val = "", wholeNo = numb, points = "", andStr = "", pointStr = "";

string endStr = (isCurrency) ? ("Only") : ("");

try

{

int decimalPlace = numb.IndexOf(".");

if (decimalPlace > 0)

{

wholeNo = numb.Substring(0, decimalPlace);

points = numb.Substring(decimalPlace + 1);

if (Convert.ToInt32(points) > 0)

{

andStr = (isCurrency) ? ("and") : ("point");

// just to separate whole numbers from points/cents

endStr = (isCurrency) ? ("Cents " + endStr) : ("");

pointStr = TranslateCents(points);

}

}

val = String.Format("{0} {1}{2} {3}", TranslateWholeNumber(wholeNo).Trim(), andStr, pointStr, endStr);

}

catch { ;}

return val;

}

private string TranslateWholeNumber(string number)

{

string word = "";

try

{

bool beginsZero = false;//tests for 0XX

bool isDone = false;//test if already translated

double dblAmt = (Convert.ToDouble(number));

int subLenght = 0;

//if ((dblAmt > 0) && number.StartsWith("0"))

if (dblAmt > 0)

{

//test for zero or digit zero in a nuemric

beginsZero = number.StartsWith("0");

int numDigits = number.Length;

int pos = 0;//store digit grouping

string place = "";//digit grouping name:hundres,thousand,etc...

if (numDigits <= 12)

{

switch (numDigits)

{

case 1://ones' range

subLenght = 0;

// word = ones(number);

isDone = true;

break;

case 2://tens' range

subLenght = 1;

place = " ";

// word = tens(number);

// isDone = true;

break;

case 3://hundreds' range

subLenght = 2;

place = " Hundred ";

break;

case 4://thousands' range

subLenght = numDigits - 1;

place = " Thousand ";

break;

case 5:

subLenght = numDigits - 2;

place = " Thousand ";

break;

case 6:

subLenght = numDigits - 1;

place = " Lakh ";

break;

case 7:

subLenght = numDigits - 2;

place = " Lakh ";

break;

case 8:

subLenght = numDigits - 1;

place = " Crore ";

break;

case 9:

subLenght = numDigits - 2;

place = " Crore ";

break;

case 10:

subLenght = numDigits - 1;

place = " Million ";

break;

case 11://Billions's range

subLenght = numDigits - 1;

place = " Billion ";

break;

case 12://Billions's range

subLenght = numDigits - 2;

place = " Billion ";

break;

//add extra case options for anything above Billion...

default:

isDone = true;

break;

}

string newNumber = "";

if (numDigits >= 3)

newNumber = number.Substring(0, number.Length - subLenght);

else if (numDigits == 2)

newNumber = (Int32.Parse(number.Substring(0, 1)) * 10).ToString();

else

newNumber = number;

word = GetWord(Convert.ToInt32(newNumber)) + place;

number = number.Substring(number.Length - subLenght);

}

if (!isDone)

{

//if transalation is not done, continue...(Recursion comes in now!!)

word += TranslateWholeNumber(number);

//check for trailing zeros

if (beginsZero) word = " and " + word.Trim();

}

//ignore digit grouping names

if (word.Trim().Equals(place.Trim())) word = "";

}

}

catch { ;}

return word.Trim();

}

private string GetWord(int number)

{

string word = "";

if (number > 0 && number <>

word = Ones(number.ToString());

else

word = Tens(number.ToString());

return word;

}

private string Tens(String digit)

{

int digt = Convert.ToInt32(digit);

string name = null;

switch (digt)

{

case 10: name = "Ten";

break;

case 11: name = "Eleven";

break;

case 12: name = "Twelve";

break;

case 13: name = "Thirteen";

break;

case 14: name = "Fourteen";

break;

case 15: name = "Fifteen";

break;

case 16: name = "Sixteen";

break;

case 17: name = "Seventeen";

break;

case 18: name = "Eighteen";

break;

case 19: name = "Nineteen";

break;

case 20: name = "Twenty";

break;

case 30: name = "Thirty";

break;

case 40: name = "Fourty";

break;

case 50: name = "Fifty";

break;

case 60: name = "Sixty";

break;

case 70: name = "Seventy";

break;

case 80: name = "Eighty";

break;

case 90: name = "Ninety";

break;

default:

if (digt > 0)

{

name = Tens(digit.Substring(0, 1) + "0") + " " + Ones(digit.Substring(1));

}

break;

}

return name;

}

private string Ones(string digit)

{

int digt = Convert.ToInt32(digit);

String name = "";

switch (digt)

{

case 1: name = "One";

break;

case 2: name = "Two";

break;

case 3: name = "Three";

break;

case 4: name = "Four";

break;

case 5: name = "Five";

break;

case 6: name = "Six";

break;

case 7: name = "Seven";

break;

case 8: name = "Eight";

break;

case 9: name = "Nine";

break;

}

return name;

}

private string TranslateCents(string cents)

{

String cts = "", digit = "", engOne = "";

for (int i = 0; i <>

{

digit = cents[i].ToString();

if (digit.Equals("0"))

{

engOne = "Zero";

}

else

{

engOne = Ones(digit);

}

cts += " " + engOne;

}

return cts;

}

Call the main function

label1.Text = ChangeToWords(textBox1.Text.Trim(), true);

0 comments: