Click here to Skip to main content
15,867,308 members
Articles / Programming Languages / C#
Alternative
Tip/Trick

Converting numbers to the word equivalent.

Rate me:
Please Sign up or sign in to vote.
4.82/5 (17 votes)
19 Aug 2010CPOL 17.4K   5   11
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)


Written By
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 3 rtyhrhrjht Pin
Alireza Eskandari19-Apr-11 5:03
professionalAlireza Eskandari19-Apr-11 5:03 
GeneralI wasn't real careful with things like spelling and commenti... Pin
Ron Beyer24-Aug-10 4:53
professionalRon Beyer24-Aug-10 4:53 
GeneralI saw some COBOL code for this nearly 30 years ago and it wa... Pin
Yeoville23-Aug-10 12:36
Yeoville23-Aug-10 12:36 
GeneralReason for my vote of 5 Simplicity, robustness. Could improv... Pin
Kamran Behzad23-Aug-10 12:32
Kamran Behzad23-Aug-10 12:32 
GeneralCan I please start the 1000,000,000 is a thousand million no... Pin
Member 468474523-Aug-10 10:54
Member 468474523-Aug-10 10:54 
GeneralReason for my vote of 2 poor Pin
Toli Cuturicu22-Aug-10 7:42
Toli Cuturicu22-Aug-10 7:42 
Reason for my vote of 2
poor
GeneralReason for my vote of 5 best Pin
divyang448221-Aug-10 9:28
professionaldivyang448221-Aug-10 9:28 
GeneralIf you are going to post code, at least check it works! Try ... Pin
OriginalGriff20-Aug-10 23:20
mveOriginalGriff20-Aug-10 23:20 
Generallol.. you people fail to see Silic0re09 sarcasm! You're even... Pin
Simon Dufour20-Aug-10 8:23
Simon Dufour20-Aug-10 8:23 
GeneralReason for my vote of 1 Failed to detect sarcarm. Pin
leppie19-Aug-10 22:05
leppie19-Aug-10 22:05 
GeneralYou missed the joke my friend :) Pin
Mustafa Ismail Mustafa19-Aug-10 9:26
Mustafa Ismail Mustafa19-Aug-10 9:26 

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

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