• Now Online : 37
  • admin@codemyne.net

Introduction

This article is about wow to convert any number or currency into words. You can convert any number into words using C#.NET. The below code also allow you to convert the number to the exact Dollars and Cents. In this article class file shown is used to define the methods for converting numbers or currency into Words.

public String changeCurrencyToWords(double numb, bool isCurrency, string currencyName,string currencyPoints)
{
    return changeToWords(numb.ToString(), isCurrency, currencyName,currencyPoints);
}
private String changeToWords(String numb, bool isCurrency, string currencyName, string currencyPoints)
{
    String val = "", wholeNo = numb, dPoints = "", andStr = "", pointStr = "";
    String endStr = (isCurrency) ? ("Only") : ("");
    try
    {
        int decimalPlace = numb.IndexOf("."); if (decimalPlace > 0)
        {
            wholeNo = numb.Substring(0, decimalPlace);
            dPoints = numb.Substring(decimalPlace + 1);
            if (Convert.ToInt32(dPoints) > 0)
            {
                andStr = (isCurrency) ? ("and") : ("point");// just to separate whole numbers from points,nps
                endStr = (isCurrency) ? (endStr) : ("");
                pointStr = changeNumbertoWords(dPoints);
            }
        }
        val = String.Format("{0} {1} {2}{3} {4} {5}", currencyName , changeNumbertoWords(wholeNo).Trim(), andStr, pointStr,currencyPoints ,endStr);
    }
    catch { ;} return val;
}
private String changeNumbertoWords(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 = changeNumbertoWords(number.Substring(0, pos)) + place + changeNumbertoWords(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;
}

Comments/Suggestions are invited. Happy coding......!

Comments Post a Comment

vijay 6/5/2012 (IST) / Reply

dfdfdf

vetri 6/14/2012 (IST) / Reply

vccc

rohit kappikere 8/7/2012 (IST) / Reply

i will check d code becz it is gentrating error

sainath iyer 10/28/2012 (IST) / Reply

thanks

raveesh 11/2/2012 (IST) / Reply

thanks guys its really helpful for me

Dharamvir 5/3/2013 (IST) / Reply

Hi, the result is not correct.

Dharamvir 5/3/2013 (IST) / Reply

Hi, the result is not correct.

Dumolia Parshotam 6/7/2013 (IST) / Reply

its very gd post ,,,, its reaaally helpful.

anant 6/26/2013 (IST) / Reply

h

hari 8/16/2013 (IST) / Reply

asass asas

Raj 8/2/2014 (IST) / Reply

This can be useful for developers http://www.sourcecodehub.com/article/18/how-to-convert-numbers-to-words-string-in-aspnet-using-csharp

Rahul 6/15/2015 (IST) / Reply

Very nice