none
how to convert number into words in C#

    Question

  • hi,

     

    i want a code in C# when i enter any no then output should come into  word form

    like

    1=one

    100=hundred

    1234=one thousand two hundred thirty four

    thanks in advance

     

     

    • Moved by Neddy Ren Tuesday, October 18, 2011 9:31 AM (From:Windows Forms General)
    Friday, October 14, 2011 12:54 PM

Answers

  • Hi nitinsharma1983,

    Here is a class that I found, that will do that.  You just instantiate the class and call the method, passing in a string value of the number:

     public class ChangeNumbersToWords
        {
       public String changeToWords(String numb)
            {
                String val = "", wholeNo = numb, points = "", andStr = "", pointStr = "";
                String endStr = ("");
                try
                {
                    int decimalPlace = numb.IndexOf(".");
                    if (decimalPlace > 0)
                    {
                        wholeNo = numb.Substring(0, decimalPlace);
                        points = numb.Substring(decimalPlace + 1);
                        if (Convert.ToInt32(points) > 0)
                        {
                            andStr = ("point");// just to separate whole numbers from points/Rupees
                            
                        }
                    }
                    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));
                    //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...
                        switch (numDigits)
                        {
                            case 1://ones' range
                                word = ones(number);
                                isDone = true;
                                break;
                            case 2://tens' range
                                word = tens(number);
                                isDone = true;
                                break;
                            case 3://hundreds' range
                                pos = (numDigits % 3) + 1;
                                place = " Hundred ";
                                break;
                            case 4://thousands' range
                            case 5:
                            case 6:
                                pos = (numDigits % 4) + 1;
                                place = " Thousand ";
                                break;
                            case 7://millions' range
                            case 8:
                            case 9:
                                pos = (numDigits % 7) + 1;
                                place = " Million ";
                                break;
                            case 10://Billions's range
                                pos = (numDigits % 10) + 1;
                                place = " Billion ";
                                break;
                            //add extra case options for anything above Billion...
                            default:
                                isDone = true;
                                break;
                        }
                        if (!isDone)
                        {//if transalation is not done, continue...(Recursion comes in now!!)
                            word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
                            //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 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;
            }
    
            
        }
    

     


    Tom Overton
    • Proposed as answer by Himanshu Bhensdadia Saturday, October 15, 2011 1:31 PM
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:24 AM
    Friday, October 14, 2011 1:09 PM
  • My version:

    public static string NumberToWords(int number)
    {
        if (number == 0)
            return "zero";
    
        if (number < 0)
            return "minus " + NumberToWords(Math.Abs(number));
    
        string words = "";
    
        if ((number / 1000000) > 0)
        {
            words += NumberToWords(number / 1000000) + " million ";
            number %= 1000000;
        }
    
        if ((number / 1000) > 0)
        {
            words += NumberToWords(number / 1000) + " thousand ";
            number %= 1000;
        }
    
        if ((number / 100) > 0)
        {
            words += NumberToWords(number / 100) + " hundred ";
            number %= 100;
        }
    
        if (number > 0)
        {
            if (words != "")
                words += "and ";
    
            var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
            var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
    
            if (number < 20)
                words += unitsMap[number];
            else
            {
                words += tensMap[number / 10];
                if ((number % 10) > 0)
                    words += "-" + unitsMap[number % 10];
            }
        }
    
        return words;
    }
    



    Mitja
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:25 AM
    Friday, October 14, 2011 2:17 PM
  • Hi,

    Take a look at the following links

    http://www.codeproject.com/KB/miscctrl/NumToWord.aspx

    http://www.codeproject.com/KB/vbscript/CurrencyToWord.aspx

    Hope it helps.

    Regards,
    A.Murugan


    If it solved your problem,Please click "Mark As Answer" on that post and "Mark as Helpful". Happy Programming!
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:24 AM
    Friday, October 14, 2011 1:35 PM
  • Another one:

        public static class NumberToWordsConvertor
        {
            public static string NumberToText(int number)
            {
                if (number == 0) return "Zero";
    
                if (number == -2147483648) return "Minus Two Hundred and Fourteen Crore Seventy Four Lakh Eighty Three Thousand Six Hundred and Forty Eight";
    
                int[] num = new int[4];
                int first = 0;
                int u, h, t;
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
    
                if (number < 0)
                {
                    sb.Append("Minus ");
                    number = -number;
                }
    
                string[] words0 = { "", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine " };
    
                string[] words1 = { "Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen " };
    
                string[] words2 = { "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety " };
    
                string[] words3 = { "Thousand ", "Lakh ", "Crore " };
    
                num[0] = number % 1000; // units
                num[1] = number / 1000;
                num[2] = number / 100000;
                num[1] = num[1] - 100 * num[2]; // thousands
                num[3] = number / 10000000; // crores
                num[2] = num[2] - 100 * num[3]; // lakhs
    
                for (int i = 3; i > 0; i--)
                {
                    if (num[i] != 0)
                    {
                        first = i;
                        break;
                    }
                }
    
                for (int i = first; i >= 0; i--)
                {
                    if (num[i] == 0) continue;
                    u = num[i] % 10; // ones
                    t = num[i] / 10;
                    h = num[i] / 100; // hundreds
                    t = t - 10 * h; // tens
    
                    if (h > 0) sb.Append(words0[h] + "Hundred ");
                    if (u > 0 || t > 0)
                    {
                        if (h > 0 || i == 0) sb.Append("and ");
    
                        if (t == 0)
                            sb.Append(words0[u]);
                        else if (t == 1)
                            sb.Append(words1[u]);
                        else
                            sb.Append(words2[t - 2] + words0[u]);
                    }
                    if (i != 0) sb.Append(words3[i - 1]);
                }
                return sb.ToString().TrimEnd();
            }
    
        }
    
    
    



    If this post answers your question, please click "Mark As Answer". If this post is helpful please click "Mark as Helpful".
    My blog: http://csharptips.wordpress.com
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:25 AM
    Saturday, October 15, 2011 12:50 PM

All replies

  • Windows Forms is the User Interface part of an application. This forum is about Windows Forms. Your question has no relation to it. I recommend asking in a general programming forum or in a C# group. http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/threads
    Armin
    • Proposed as answer by Cor LigthertMVP Sunday, October 16, 2011 9:25 AM
    • Unproposed as answer by Neddy Ren Wednesday, October 19, 2011 2:23 AM
    Friday, October 14, 2011 1:06 PM
  • Hi nitinsharma1983,

    Here is a class that I found, that will do that.  You just instantiate the class and call the method, passing in a string value of the number:

     public class ChangeNumbersToWords
        {
       public String changeToWords(String numb)
            {
                String val = "", wholeNo = numb, points = "", andStr = "", pointStr = "";
                String endStr = ("");
                try
                {
                    int decimalPlace = numb.IndexOf(".");
                    if (decimalPlace > 0)
                    {
                        wholeNo = numb.Substring(0, decimalPlace);
                        points = numb.Substring(decimalPlace + 1);
                        if (Convert.ToInt32(points) > 0)
                        {
                            andStr = ("point");// just to separate whole numbers from points/Rupees
                            
                        }
                    }
                    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));
                    //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...
                        switch (numDigits)
                        {
                            case 1://ones' range
                                word = ones(number);
                                isDone = true;
                                break;
                            case 2://tens' range
                                word = tens(number);
                                isDone = true;
                                break;
                            case 3://hundreds' range
                                pos = (numDigits % 3) + 1;
                                place = " Hundred ";
                                break;
                            case 4://thousands' range
                            case 5:
                            case 6:
                                pos = (numDigits % 4) + 1;
                                place = " Thousand ";
                                break;
                            case 7://millions' range
                            case 8:
                            case 9:
                                pos = (numDigits % 7) + 1;
                                place = " Million ";
                                break;
                            case 10://Billions's range
                                pos = (numDigits % 10) + 1;
                                place = " Billion ";
                                break;
                            //add extra case options for anything above Billion...
                            default:
                                isDone = true;
                                break;
                        }
                        if (!isDone)
                        {//if transalation is not done, continue...(Recursion comes in now!!)
                            word = translateWholeNumber(number.Substring(0, pos)) + place + translateWholeNumber(number.Substring(pos));
                            //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 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;
            }
    
            
        }
    

     


    Tom Overton
    • Proposed as answer by Himanshu Bhensdadia Saturday, October 15, 2011 1:31 PM
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:24 AM
    Friday, October 14, 2011 1:09 PM
  • Hi,

    Take a look at the following links

    http://www.codeproject.com/KB/miscctrl/NumToWord.aspx

    http://www.codeproject.com/KB/vbscript/CurrencyToWord.aspx

    Hope it helps.

    Regards,
    A.Murugan


    If it solved your problem,Please click "Mark As Answer" on that post and "Mark as Helpful". Happy Programming!
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:24 AM
    Friday, October 14, 2011 1:35 PM
  • My version:

    public static string NumberToWords(int number)
    {
        if (number == 0)
            return "zero";
    
        if (number < 0)
            return "minus " + NumberToWords(Math.Abs(number));
    
        string words = "";
    
        if ((number / 1000000) > 0)
        {
            words += NumberToWords(number / 1000000) + " million ";
            number %= 1000000;
        }
    
        if ((number / 1000) > 0)
        {
            words += NumberToWords(number / 1000) + " thousand ";
            number %= 1000;
        }
    
        if ((number / 100) > 0)
        {
            words += NumberToWords(number / 100) + " hundred ";
            number %= 100;
        }
    
        if (number > 0)
        {
            if (words != "")
                words += "and ";
    
            var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
            var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
    
            if (number < 20)
                words += unitsMap[number];
            else
            {
                words += tensMap[number / 10];
                if ((number % 10) > 0)
                    words += "-" + unitsMap[number % 10];
            }
        }
    
        return words;
    }
    



    Mitja
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:25 AM
    Friday, October 14, 2011 2:17 PM
  • Another one:

        public static class NumberToWordsConvertor
        {
            public static string NumberToText(int number)
            {
                if (number == 0) return "Zero";
    
                if (number == -2147483648) return "Minus Two Hundred and Fourteen Crore Seventy Four Lakh Eighty Three Thousand Six Hundred and Forty Eight";
    
                int[] num = new int[4];
                int first = 0;
                int u, h, t;
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
    
                if (number < 0)
                {
                    sb.Append("Minus ");
                    number = -number;
                }
    
                string[] words0 = { "", "One ", "Two ", "Three ", "Four ", "Five ", "Six ", "Seven ", "Eight ", "Nine " };
    
                string[] words1 = { "Ten ", "Eleven ", "Twelve ", "Thirteen ", "Fourteen ", "Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen " };
    
                string[] words2 = { "Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety " };
    
                string[] words3 = { "Thousand ", "Lakh ", "Crore " };
    
                num[0] = number % 1000; // units
                num[1] = number / 1000;
                num[2] = number / 100000;
                num[1] = num[1] - 100 * num[2]; // thousands
                num[3] = number / 10000000; // crores
                num[2] = num[2] - 100 * num[3]; // lakhs
    
                for (int i = 3; i > 0; i--)
                {
                    if (num[i] != 0)
                    {
                        first = i;
                        break;
                    }
                }
    
                for (int i = first; i >= 0; i--)
                {
                    if (num[i] == 0) continue;
                    u = num[i] % 10; // ones
                    t = num[i] / 10;
                    h = num[i] / 100; // hundreds
                    t = t - 10 * h; // tens
    
                    if (h > 0) sb.Append(words0[h] + "Hundred ");
                    if (u > 0 || t > 0)
                    {
                        if (h > 0 || i == 0) sb.Append("and ");
    
                        if (t == 0)
                            sb.Append(words0[u]);
                        else if (t == 1)
                            sb.Append(words1[u]);
                        else
                            sb.Append(words2[t - 2] + words0[u]);
                    }
                    if (i != 0) sb.Append(words3[i - 1]);
                }
                return sb.ToString().TrimEnd();
            }
    
        }
    
    
    



    If this post answers your question, please click "Mark As Answer". If this post is helpful please click "Mark as Helpful".
    My blog: http://csharptips.wordpress.com
    • Marked as answer by Neddy Ren Wednesday, October 19, 2011 2:25 AM
    Saturday, October 15, 2011 12:50 PM
  • Moderators,

    Can this C# question be moved to the C# forum. 

    There is nothing in the question and in the answers about the Windows Forms Control namespace like Armin already wrote.

     http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/threads

    Not even a textbox is used in the given replies.


    Thanks
    Cor
    Sunday, October 16, 2011 9:30 AM
  • Thank u friend....
    Friday, December 30, 2011 5:32 PM
  • your method do not work correctly and fourteen is wrong spelling.

       
    Monday, February 03, 2014 5:29 AM
  • your method do not work correctly and fourteen is wrong spelling.

    >your method do not work correctly ...

    Which method would that be? We have no way of knowing which reply you happen to have been
    looking at when you posted this. In what way does it "not work correctly"?

    >... and fourteen is wrong spelling.

    It's right for English. How do you think 14 should be spelled, and in which natural language?

    - Wayne

    P.S. - In case you hadn't noticed, this thread is more than two years old so the original
    poster has probably moved on to other issues by now.

    Monday, February 03, 2014 10:04 AM