Click here to Skip to main content
11,645,893 members (76,321 online)
Click here to Skip to main content

Tagged as

Convert Numeric Currency into Words (For INDIAN Currency Only) (Optimized)

, 6 Sep 2011 CPOL 90.9K 1.8K 28
Rate this:
Please Sign up or sign in to vote.
Converts from 0(zero) to 10^39(adant-shinghar) into words. E.g. 70250 into seventy thousand two hundred fifty

Introduction

This is a simple program or a complicated one too that converts numeric value into words from 0 to 1039;... Great!!!

A Short introduction may be:

It can convert 0 to Zero, can also convert to 12345 to "twelve thousand three hundred forty five" and can also covert 1039 to 1 Adant-Shinghar. (Courtesy: Wikipedia for providing me with the notations.)

Before you move further, let me inform you first that this class will give you a returned value in string with HTML tags attached, so please use it for web application so that you will find neat and clean results and to use it for Windows Forms, please make the necessary changes.

So guys, let's dive into the logic !!!

Background

Below is a snap shot provided to get the following results.

Using the Code

Let's dig into the code step by step.

Step 1

Take three static List<DictionaryEntry> Type objects for static data storage and load that in the constructor of class.

Have a look at the code snippets.

Constructor of the class:

namespace Hirs.IndianNumericToWordConverter
{
    public class IndiaCurrencyConverter
    {
        private Hashtable htPunctuation;
        private Dictionary<int> DictStaticSuffix;
        private Dictionary<int> DictStaticPrefix;
        private Dictionary<int> DictHelpNotation;
        private System.Drawing.Color color;

        public IndiaCurrencyConverter()
        {
            htPunctuation = new Hashtable();
            DictStaticPrefix = new Dictionary<int>();
            DictStaticSuffix = new Dictionary<int>();
            DictHelpNotation = new Dictionary<int>();
            Native = native;
            LoadStaticPrefix();
            LoadStaticSuffix();
            LoadHelpofNotation();
        }

Here is the method that loads static data with values.

private void LoadStaticSuffix()
        {
            DictStaticSuffix.Add(1, "One ");
            DictStaticSuffix.Add(2, "Two ");
            DictStaticSuffix.Add(3, "Three ");
            DictStaticSuffix.Add(4, "Four ");
            DictStaticSuffix.Add(5, "Five ");
            DictStaticSuffix.Add(6, "Six ");
            DictStaticSuffix.Add(7, "Seven ");
            DictStaticSuffix.Add(8, "Eight ");
            DictStaticSuffix.Add(9, "Nine ");
            DictStaticSuffix.Add(10, "Ten ");
            DictStaticSuffix.Add(11, "Eleven ");
            DictStaticSuffix.Add(12, "Twelve ");
            DictStaticSuffix.Add(13, "Thirteen ");
            DictStaticSuffix.Add(14, "Fourteen ");
            DictStaticSuffix.Add(15, "Fifteen ");
            DictStaticSuffix.Add(16, "Sixteen ");
            DictStaticSuffix.Add(17, "Seventeen ");
            DictStaticSuffix.Add(18, "Eighteen ");
            DictStaticSuffix.Add(19, "Nineteen ");
            DictStaticSuffix.Add(20, "Twenty ");
            DictStaticSuffix.Add(30, "Thirty ");
            DictStaticSuffix.Add(40, "Forty ");
            DictStaticSuffix.Add(50, "Fifty ");
            DictStaticSuffix.Add(60, "Sixty ");
            DictStaticSuffix.Add(70, "Seventy ");
            DictStaticSuffix.Add(80, "Eighty ");
            DictStaticSuffix.Add(90, "Ninety ");
        }
        private void LoadStaticPrefix()
        {
                DictStaticPrefix.Add(2, "Thousand ");
                DictStaticPrefix.Add(3, "Lac ");
                DictStaticPrefix.Add(4, "Crore ");
                DictStaticPrefix.Add(5, "Arab ");
                DictStaticPrefix.Add(6, "Kharab ");
                DictStaticPrefix.Add(7, "Neel ");
                DictStaticPrefix.Add(8, "Padma ");
                DictStaticPrefix.Add(9, "Shankh ");
                DictStaticPrefix.Add(10, "Maha-shankh ");
                DictStaticPrefix.Add(11, "Ank ");
                DictStaticPrefix.Add(12, "Jald ");
                DictStaticPrefix.Add(13, "Madh ");
                DictStaticPrefix.Add(14, "Paraardha ");
                DictStaticPrefix.Add(15, "Ant ");
                DictStaticPrefix.Add(16, "Maha-ant ");
                DictStaticPrefix.Add(17, "Shisht ");
                DictStaticPrefix.Add(18, "Singhar ");
                DictStaticPrefix.Add(19, "Maha-singhar ");
                DictStaticPrefix.Add(20, "Adant-singhar ");
        }
        private void LoadHelpofNotation()
        {
            DictHelpNotation.Add(2, "=1,000 (3 Trailing Zeros)");
                DictHelpNotation.Add(3, "=1,00,000 (5 Trailing Zeros)");
                DictHelpNotation.Add(4, "=1,00,00,000 (7 Trailing Zeros)");
                DictHelpNotation.Add(5, "=1,00,00,00,000 (9 Trailing Zeros)");
                DictHelpNotation.Add(6, "=1,00,00,00,00,000 (11 Trailing Zeros)");
                DictHelpNotation.Add(7, "=1,00,00,00,00,00,000 (13 Trailing Zeros)");
                DictHelpNotation.Add(8, "=1,00,00,00,00,00,00,000 (15 Trailing Zeros)");
                DictHelpNotation.Add
		(9, "=1,00,00,00,00,00,00,00,000 (17 Trailing Zeros)");
                DictHelpNotation.Add(10, "=1,00,00,00,00,00,00,00,00,000 
					(19 Trailing Zeros)");
                DictHelpNotation.Add(11, "=1,00,00,00,00,00,00,00,00,00,000 
					(21 Trailing Zeros)");
                DictHelpNotation.Add(12, "=1,00,00,00,00,00,00,00,00,00,00,000 
					(23 Trailing Zeros)");
                DictHelpNotation.Add(13, "=1,00,00,00,00,00,00,00,00,00,00,00,000 
					(25 Trailing Zeros)");
                DictHelpNotation.Add(14, "=1,00,00,00,00,00,00,00,00,00,00,00,00,000 
					(27 Trailing Zeros)");
                DictHelpNotation.Add(15, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(29 Trailing Zeros)");
                DictHelpNotation.Add
		(16, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(31 Trailing Zeros)");
                DictHelpNotation.Add
		(17, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(33 Trailing Zeros)");
                DictHelpNotation.Add
		(18, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(35 Trailing Zeros)");
                DictHelpNotation.Add
		(19, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(37 Trailing Zeros)");
                DictHelpNotation.Add
		(20, "=1,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,000
					(39 Trailing Zeros)");
            }

and I got comments on what is needed of List<DictionaryEntry> listHelpNotation so, the reason behind that is on Hovering you can get help its unit values.

Step 2

Now insert Input value (Let me notify you that input value will be in string because no datatype supports 1039).

Assume input value is 123456789.

First reverse the input string:

(987654321)

Then split and insert reversed string into hashtable (first 3 digit, and then after 2 till end):

(987,65,43,21)

and then reverse every splitted value inserted into hashtable so that it makes real sense.

(789,56,34,12)

and insert that to hashtable with key value pair using the following code:

private void InsertToPunctuationTable(string strValue)
        {
            htPunctuation.Add(1, strValue.Substring(0, 3).ToString());
            int j = 2;
            for (int i = 3; i < strValue.Length; i = i + 2)
            {
                if (strValue.Substring(i).Length > 0)
                {
                    if (strValue.Substring(i).Length >= 2)
                        htPunctuation.Add(j, strValue.Substring(i, 2).ToString());
                    else
                        htPunctuation.Add(j, strValue.Substring(i, 1).ToString());
                }
                else
                    break;
                j++;

            }
        }

Now get the word notation for every value stored in hashtable descending.

Have a look at the code.

Here's the function:

GetWordConversion(string inputNumber)

It takes Stringconverted numeric value and gives its Word Conversation, It will take input which will have a maximum of 3 digits. You may remember from the upper hashtable that Entry has value which is maximum of 3 digits.

Explanation of Condition Check

if (int.Parse(inputNumber.Substring(0, 1)) > 0)

Checks if the first digit is not zero, then return Hundreds notation. E.g. 434 then it returns Four Hundred

string TempString = StaticSuffixFind(inputNumber.Substring(1, 2));

This condition checks that if the two digit value is already stored in List. E.g., it will return twelve with input of 12. Rather than returning One Two, and if it is 34 then No stored value will be found and it will pass the condition if(tempString == "") and will move on. The different condition will be applied to if the number is Two digit, or 1 digit.

private string GetWordConversion(string inputNumber)
        {
            string ToReturnWord = String.Empty;
            if (inputNumber.Length <= 3 && inputNumber.Length > 0)
            {
                if (inputNumber.Length == 3)
                {
                    if (int.Parse(inputNumber.Substring(0, 1)) > 0)
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(0, 1)) + "Hundred ";

                    string TempString = StaticSuffixFind(inputNumber.Substring(1, 2));

                    if (TempString == "")
                    {
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(1, 1) + "0");
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(2, 1));
                    }
                    ToReturnWord = ToReturnWord + TempString;
                }
                if (inputNumber.Length == 2)
                {
                    string TempString = StaticSuffixFind(inputNumber.Substring(0, 2));
                    if (TempString == "")
                    {
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(0, 1) + "0");
                        ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(1, 1));
                    }
                    ToReturnWord = ToReturnWord + TempString;
                }
                if (inputNumber.Length == 1)
                {
                    ToReturnWord = ToReturnWord +
			StaticSuffixFind(inputNumber.Substring(0, 1));
                }
            }
            return ToReturnWord;
        }

After that, attach the following splitted words from the splitted hashtable value and their notation and make the one big string that will depict the whole notation:

private string ReturnHashtableValue()
        {
            string strFinalString = String.Empty;
            for (int i = htPunctuation.Count; i > 0; i--)
            {
                if (GetWordConversion((htPunctuation[i]).ToString()) != "")
                    strFinalString = strFinalString +
			GetWordConversion((htPunctuation[i]).ToString()) +
			StaticPrefixFind((i).ToString());
            }
            return strFinalString;
        }

Points of Interest

For now, I have submitted code for Indian currency only. Now for moving further in part-II, I will also depict how to covert in international currency as suggested by Indian mentors from Indian forums.

FYI, Part-II is published. Have a look:

And last but not the least, thanks to the audience for giving your votes and valuable time.

For further details, please see the attached class.

History

  • This is Part-I. Part-II has been submitted for international currency.

License

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

Share

About the Author

Hiren solanki
Software Developer
India India
He is a Smart IT devloper with Few years of Expeariance But having Great command on ASP.net,C#,SQL Query,SSRS,Crystal Reports

Apart from that He Loves multimedia work too, Master of Adobe photoshop, Illustrator, CSS , HTML and all things.

He is Currently working in Microsoft Dynamics CRM and Having Nice Expearince with CRM. CRM Rocks!!!

You may also be interested in...

Comments and Discussions

 
QuestionThanks Pin
Member 1040915822-May-15 22:57
memberMember 1040915822-May-15 22:57 
QuestionQ 1 Pin
sofyan_fly25-Jan-13 2:17
membersofyan_fly25-Jan-13 2:17 
AnswerRe: Q 1 Pin
Hiren solanki24-Mar-14 5:31
memberHiren solanki24-Mar-14 5:31 
QuestionThanks Pin
rahulkanojia20026-Sep-12 20:22
memberrahulkanojia20026-Sep-12 20:22 
GeneralMy vote of 4 Pin
manoj kumar choubey2-Feb-12 22:46
membermanoj kumar choubey2-Feb-12 22:46 
GeneralMy vote of 5 Pin
GPUToaster™4-Oct-11 1:26
memberGPUToaster™4-Oct-11 1:26 
QuestionWorks only till 999 Pin
arunglobal23-Aug-11 20:43
memberarunglobal23-Aug-11 20:43 
AnswerRe: Works only till 999 Pin
Hiren solanki5-Sep-11 1:08
memberHiren solanki5-Sep-11 1:08 
General[My vote of 1] OMG i've never seen... Pin
Selvin27-Dec-10 0:54
memberSelvin27-Dec-10 0:54 
GeneralRe: [My vote of 1] OMG i've never seen... Pin
Hiren Solanki27-Dec-10 0:58
memberHiren Solanki27-Dec-10 0:58 
Generalgood work Pin
Pranay Rana15-Dec-10 20:16
memberPranay Rana15-Dec-10 20:16 
GeneralRe: good work Pin
Hiren Solanki15-Dec-10 20:17
memberHiren Solanki15-Dec-10 20:17 
GeneralMy vote of 5 Pin
GPUToaster20-Oct-10 1:07
memberGPUToaster20-Oct-10 1:07 
GeneralRe: My vote of 5 Pin
Hiren Solanki28-Oct-10 0:49
memberHiren Solanki28-Oct-10 0:49 
GeneralGood one Hiren! Pin
Sushant Joshi22-Sep-10 19:46
memberSushant Joshi22-Sep-10 19:46 
GeneralRe: Good one Hiren! Pin
Hiren Solanki22-Sep-10 19:49
memberHiren Solanki22-Sep-10 19:49 
GeneralMy vote of 5 Pin
Prosanta Kundu online12-Sep-10 18:33
memberProsanta Kundu online12-Sep-10 18:33 
GeneralRe: My vote of 5 Pin
Hiren Solanki12-Sep-10 19:31
memberHiren Solanki12-Sep-10 19:31 
GeneralMy vote of 2 [modified] Pin
Nagy Vilmos10-Sep-10 3:23
memberNagy Vilmos10-Sep-10 3:23 
AnswerRe: My vote of 2 Pin
Abhijit Jana10-Sep-10 7:14
mvpAbhijit Jana10-Sep-10 7:14 
GeneralRe: My vote of 2 Pin
KunalChowdhury10-Sep-10 7:57
mentorKunalChowdhury10-Sep-10 7:57 
GeneralRe: My vote of 2 Pin
Abhijit Jana10-Sep-10 8:27
mvpAbhijit Jana10-Sep-10 8:27 
GeneralRe: My vote of 2 Pin
Hiren Solanki10-Sep-10 17:12
memberHiren Solanki10-Sep-10 17:12 
GeneralRe: My vote of 2 [modified] Pin
Hiren Solanki10-Sep-10 19:11
memberHiren Solanki10-Sep-10 19:11 
GeneralMy vote of 3 Pin
karabax1-Sep-10 6:00
memberkarabax1-Sep-10 6:00 
GeneralRe: My vote of 3 Pin
Hiren Solanki5-Sep-10 19:30
memberHiren Solanki5-Sep-10 19:30 
GeneralRe: My vote of 3 Pin
S M P9-Sep-10 2:26
memberS M P9-Sep-10 2:26 
GeneralRe: My vote of 3 Pin
Hiren Solanki9-Sep-10 2:51
memberHiren Solanki9-Sep-10 2:51 
GeneralRe: My vote of 3 Pin
KunalChowdhury9-Sep-10 19:56
mentorKunalChowdhury9-Sep-10 19:56 
Don't worry on that.


Don't forget to Click on [Vote] and [Good Answer] on the posts that helped you.


Regards - Kunal Chowdhury | Software Developer | Chennai | India | My Blog | My Tweets | Silverlight Tutorial

GeneralRe: My vote of 3 Pin
Hiren Solanki9-Sep-10 20:01
memberHiren Solanki9-Sep-10 20:01 
GeneralRe: My vote of 3 Pin
Abhinav S9-Sep-10 20:05
memberAbhinav S9-Sep-10 20:05 
GeneralRe: My vote of 3 Pin
KunalChowdhury9-Sep-10 20:06
mentorKunalChowdhury9-Sep-10 20:06 
GeneralRe: My vote of 3 Pin
Hiren Solanki9-Sep-10 20:08
memberHiren Solanki9-Sep-10 20:08 
GeneralRe: My vote of 3 Pin
KunalChowdhury9-Sep-10 20:10
mentorKunalChowdhury9-Sep-10 20:10 
GeneralRe: My vote of 3 Pin
KunalChowdhury9-Sep-10 20:11
mentorKunalChowdhury9-Sep-10 20:11 
GeneralRe: My vote of 3 Pin
Hiren Solanki9-Sep-10 20:13
memberHiren Solanki9-Sep-10 20:13 
GeneralRe: My vote of 3 Pin
Nagy Vilmos10-Sep-10 3:14
memberNagy Vilmos10-Sep-10 3:14 
GeneralRe: My vote of 3 Pin
Hiren Solanki10-Sep-10 3:19
memberHiren Solanki10-Sep-10 3:19 
GeneralNice one Pin
HimanshuJoshi1-Sep-10 3:53
memberHimanshuJoshi1-Sep-10 3:53 
GeneralRe: Nice one Pin
Hiren Solanki5-Sep-10 19:30
memberHiren Solanki5-Sep-10 19:30 
GeneralRe: Nice one Pin
Nagy Vilmos10-Sep-10 3:23
memberNagy Vilmos10-Sep-10 3:23 
GeneralRe: Nice one Pin
Hiren Solanki10-Sep-10 3:26
memberHiren Solanki10-Sep-10 3:26 
GeneralRe: Nice one Pin
HimanshuJoshi10-Sep-10 4:04
memberHimanshuJoshi10-Sep-10 4:04 
GeneralRe: Nice one Pin
Nagy Vilmos10-Sep-10 4:14
memberNagy Vilmos10-Sep-10 4:14 
GeneralRe: Nice one Pin
Hiren Solanki10-Sep-10 4:21
memberHiren Solanki10-Sep-10 4:21 
GeneralRe: Nice one Pin
HimanshuJoshi10-Sep-10 3:58
memberHimanshuJoshi10-Sep-10 3:58 
GeneralRe: Nice one Pin
Nagy Vilmos10-Sep-10 4:19
memberNagy Vilmos10-Sep-10 4:19 
GeneralMy vote of 5 Pin
Viral Upadhyay1-Sep-10 1:55
memberViral Upadhyay1-Sep-10 1:55 
GeneralRe: My vote of 5 Pin
Hiren Solanki5-Sep-10 19:29
memberHiren Solanki5-Sep-10 19:29 
GeneralMy vote of 4 Pin
S M P31-Aug-10 23:26
memberS M P31-Aug-10 23:26 

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
Web04 | 2.8.150731.1 | Last Updated 6 Sep 2011
Article Copyright 2010 by Hiren solanki
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid