How to Convert Numeric Number into Word in C#

Leave a Comment
In this tutorial, we have to learn how to convert numeric Number into Word in C#.

Just use below method(NumberToWords) and pass numeric value that you want to convert into words.
using System;
using System.Collections;
    class NumberToWordsConverter
    {
        // Single-digit and small number names
        private string[] _smallNumbers = new string[] {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
        // Tens number names from twenty upwards
        private string[] _tens = new string[] { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" };
        // Scale number names for use during recombination
        private string[] _scaleNumbers = new string[] { "", "Thousand", "Million", "Billion" };
       

        // Converts an integer value into English words
        public string NumberToWords(int number)
        {
            // Zero rule
            if (number == 0)
                return _smallNumbers[0];
            // Array to hold four three-digit groups
            int[] digitGroups = new int[4];
            // Ensure a positive number to extract from
            int positive = Math.Abs(number);
            // Extract the three-digit groups
            for (int i = 0; i < 4; i++)
            {
                digitGroups[i] = positive % 1000;
                positive /= 1000;
            }
            // Convert each three-digit group to words
            string[] groupText = new string[4];
            for (int i = 0; i < 4; i++)
                groupText[i] = ThreeDigitGroupToWords(digitGroups[i]);
            // Recombine the three-digit groups
            string combined = groupText[0];
            bool appendAnd;
            // Determine whether an 'and' is needed
            appendAnd = (digitGroups[0] > 0) && (digitGroups[0] < 100);
            // Process the remaining groups in turn, smallest to largest
            for (int i = 1; i < 4; i++)
            {
                // Only add non-zero items
                if (digitGroups[i] != 0)
                {
                    // Build the string to add as a prefix
                    string prefix = groupText[i] + " " + _scaleNumbers[i];
                    if (combined.Length != 0)
                        prefix += appendAnd ? " and " : ", ";
                    // Opportunity to add 'and' is ended
                    appendAnd = false;
                    // Add the three-digit group to the combined string
                    combined = prefix + combined;
                }
            }
            // Negative rule
            if (number < 0)
                combined = "Negative " + combined;
            return combined;
        }


        // Converts a three-digit group into English words
        private string ThreeDigitGroupToWords(int threeDigits)
        {
            // Initialise the return text
            string groupText = "";
            // Determine the hundreds and the remainder
            int hundreds = threeDigits / 100;
            int tensUnits = threeDigits % 100;
            // Hundreds rules
            if (hundreds != 0)
            {
                groupText += _smallNumbers[hundreds] + " Hundred";
                if (tensUnits != 0)
                    groupText += " and ";
            }
            // Determine the tens and units
            int tens = tensUnits / 10;
            int units = tensUnits % 10;
            // Tens rules
            if (tens >= 2)
            {
                groupText += _tens[tens];
                if (units != 0)
                    groupText += " " + _smallNumbers[units];
            }
            else if (tensUnits != 0)
                groupText += _smallNumbers[tensUnits];
            return groupText;
        }
    }

0 comments:

Post a Comment