Click here to Skip to main content
Click here to Skip to main content
Alternative Tip/Trick

Converting numbers to the word equivalent.

, 19 Aug 2010 CPOL
Rate this:
Please Sign up or sign in to vote.
I'm sorry, but that's a horrible way to do it...Here is what I would do... public class NumberToWords { public static string ConvertToWords(int Number) { //Split the string into 3 part pieces string numStr = Number.ToString(); ...
I'm sorry, but that's a horrible way to do it...
 
Here is what I would do...
    public class NumberToWords
    {
 
        public static string ConvertToWords(int Number)
        {
            //Split the string into 3 part pieces
            string numStr = Number.ToString();
            List<string> numParts = new List<string>();
 
            string currentStr = "";
 
            int t = 0;
            for (int i = numStr.Length - 1; i >= 0; i--)
            {
                t++;
                currentStr = numStr[i] + currentStr;
 
                if (t == 3)
                {
                    currentStr = "," + currentStr;
                    t = 0;
                }
            }
 
            if (currentStr.StartsWith(","))
                currentStr = currentStr.Remove(0, 1);
 
            string[] vals = currentStr.Split(',');
 
            numParts.AddRange(vals);
 
            List<string> outString = new List<string>();
 
            List<string> delims = new List<string>();
 
            delims.Add("");
 
            if (numParts.Count >= 2)
                delims.Add("Thousand");
 
            if (numParts.Count >= 3)
                delims.Add("Million");
 
            if (numParts.Count >= 4)
                delims.Add("Billion");
 
            if (numParts.Count >= 5)
                delims.Add("Trillion");
 
            int j = delims.Count - 1;
 
            for (int i = 0; i < numParts.Count; i++)
            {
                int num = int.Parse(numParts[i]);
 
                string temp = "";
 

                if (num >= 100)
                    temp = ConvertThreeDigits(num);
                else if (num >= 10)
                    temp = ConvertTwoDigits(num);
                else
                {
                    if (i == 0)
                    {
                        temp = ConvertOneDigit(num);
                    }
                }
 
 
                temp += " " + delims[j];
                j--;
 
                outString.Add(temp);
            }
 
            string retString = string.Join(" ", outString.ToArray());
 
            return retString;
        }
 
        private static string ConvertThreeDigits(int Number)
        {
            int firstDigit = Number / 100;
            int lastDigits = Number - (firstDigit * 100);
 
            if (lastDigits == 0)
                return ConvertOneDigit(firstDigit) + " Hundred";
            else if (lastDigits < 9)
                return ConvertOneDigit(firstDigit) + " Hundred " + ConvertOneDigit(lastDigits);
            else
                return ConvertOneDigit(firstDigit) + " Hundred " + ConvertTwoDigits(lastDigits);
        }
 
        private static string ConvertTwoDigits(int Number)
        {
            int firstDigit = Number / 10;
            int secondDigit = Number - (firstDigit * 10);
 
            if (Number >= 10 && Number < 20)
            {
                if (secondDigit == 4 || secondDigit == 6 ||
                    secondDigit >= 7)
                {
                    return ConvertOneDigit(secondDigit) + "teen";
                }
                else
                {
                    switch (secondDigit)
                    {
                        case 0:
                            return "Ten";
                        case 1:
                            return "Eleven";
                        case 2:
                            return "Twelve";
                        case 3:
                            return "Thirteen";
                        case 5:
                            return "Fifteen";
                        default:
                            return "ERROR";
                    }
                }
            }
            else
            {
                string firstPart = "";
 
                switch (firstDigit)
                {
                    case 2:
                        firstPart = "Twenty";
                        break;
                    case 3:
                        firstPart = "Thirty";
                        break;
                    case 4:
                        firstPart = "Fourty";
                        break;
                    case 5:
                        firstPart = "Fifty";
                        break;
                    case 6:
                        firstPart = "Sixty";
                        break;
                    case 7:
                        firstPart = "Seventy";
                        break;
                    case 8:
                        firstPart = "Eighty";
                        break;
                    case 9:
                        firstPart = "Ninty";
                        break;
                    default:
                        return "ERROR";
                }
 
                if (secondDigit > 0)
                    return firstPart + "-" + ConvertOneDigit(secondDigit);
                else
                    return firstPart;
            }
        }
 
        private static string ConvertOneDigit(int Number)
        {
            switch (Number)
            {
                case 0:
                    return "Zero";
                case 1:
                    return "One";
                case 2:
                    return "Two";
                case 3:
                    return "Three";
                case 4:
                    return "Four";
                case 5:
                    return "Five";
                case 6:
                    return "Six";
                case 7:
                    return "Seven";
                case 8:
                    return "Eight";
                case 9:
                    return "Nine";
                default:
                    return "ERROR";
            }
        }
    }
</string></string></string></string></string></string>

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Ron Beyer
President 6D Systems LLC
United States United States
I studied Software Engineering at Milwaukee School of Engineering for 2 years before switching to Management of Information Systems for a more business oriented approach. I've been developing software since the age of 14, and have waded through languages such as QBasic, TrueBasic, C, C++, Java, VB6, VB.NET, C#, etc. I've been developing professionally since 2002 in .NET.

Comments and Discussions

 
GeneralReason for my vote of 2 poor PinmemberToli Cuturicu22-Aug-10 8:42 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web03 | 2.8.1411019.1 | Last Updated 19 Aug 2010
Article Copyright 2010 by Ron Beyer
Everything else Copyright © CodeProject, 1999-2014
Layout: fixed | fluid