Click here to Skip to main content
Licence CPOL
First Posted 16 Feb 2004
Views 99,677
Downloads 3,053
Bookmarked 22 times

Convert Currency To Words in Lakh, Crores, etc.

By P.K.Agarwal | 16 Feb 2004
Convert a given currency in words with Indian style digital grouping
6 votes, 27.3%
1
2 votes, 9.1%
2
3 votes, 13.6%
3
3 votes, 13.6%
4
8 votes, 36.4%
5
3.23/5 - 22 votes
μ 2.68, σa 2.95 [?]

Introduction

In the computing world, the convention used for grouping of digits is based on international standards which generally follows American practice. It means that digits are grouped in groups of two digits each, i.e. thousands, millions, billions, etc. However, people in India are habituated to groups of three, two, two... This groups form the thousands, lakhs, crores, etc. To solve this problem, a function has already been posted on CodeProject by me for converting any number to the groupings of thousands, lakhs, crores, etc. In continuation of this, the function here converts any number to the number in words with digit grouping of thousands, lakhs, crores, etc.

Background

This function is in Visual Basic and is based on the knowledge base article of Microsoft. The original article converts the number to the international digit grouping, i.e. thousands, millions, billions, etc.

Using the Code

As the function is written in Visual Basic, the same may be used in any application using Visual Basic as the scripting language. For using the code in Excel, Word, Access, simply copy and paste the full code in the Visual Basic module and use the function.

How It Works

The function is named as NumberToWords. This accepts a parameter of type variant. First, the function checks the existence of decimal in the number passed as parameter. If decimal exists, it constructs the word for paisa. After removing the decimal digits from the number, it converts digits, tens and hundreds by using routine ConvertDigits, ConvertTens and ConvertHundreds respectively. It constructs and returns a string containing the number in words with rupees and paisa as prefix and suffix.

History

  • 16th February, 2004: Initial post

License

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

About the Author

P.K.Agarwal

Systems Engineer

India India

Member
I love to learn new technology specially IT related. Programming is my hobby.

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralBugs corrected in the function [modified] PinmemberVidyadhar B.C.23:05 14 Oct '07  
GeneralConvert Currency To Words Solved all problems PinmemberNair Sreekumar0:25 31 Jul '07  
GeneralBug in the code and a workaround Pinmemberkunmun238:53 14 Jul '07  
Doesn't work correctly for numbers less than 3 digits..for instance
1 shows as One Thousand One
10 shows as Ten Thousand Ten
99 shows as Ninety Nine Thousand Ninety Nine
 
I tried correcting the code with a small IF condition as shown below. This condition may not work properly if you have decimal numbers. Works fine for me since I round off the numbers to 0 places and do not use the PAISE field. Also I have added the words "Only" at the end.
 
Edited version of the code :
 
Option Explicit
 
' Function for conversion of a Currency to words
' Parameter - accept a Currency
' Returns the number in words format
'*************************************************
 
Function CurrencyToWord(ByVal MyNumber)
Dim Temp
Dim Rupees, Paisa As String
Dim DecimalPlace, iCount
Dim Hundreds, Words As String
ReDim Place(9) As String
Place(0) = " Thousand "
Place(2) = " Lakh "
Place(4) = " Crore "
Place(6) = " Arab "
Place(8) = " Kharab "
On Error Resume Next
' Convert MyNumber to a string, trimming extra spaces.
MyNumber = Trim(Str(MyNumber))
 
' Find decimal place.
' DecimalPlace = InStr(MyNumber, ".")
 
'==========disabled the decimal part=============
' If we find decimal place...
' If DecimalPlace > 0 Then
' Convert Paisa
' Temp = Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2)
' Paisa = " and " & ConvertTens(Temp) & " Paisa"
 
' Strip off paisa from remainder to convert.
' MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
' End If
 
'================================================

' Convert last 3 digits of MyNumber to ruppees in word.
Hundreds = ConvertHundreds(Right(MyNumber, 3))
'=========Added the IF condition below
'=========to resolve the <3 shows thousand bug
 
If Len(MyNumber) >= 3 Then
' Strip off last three digits
MyNumber = Left(MyNumber, Len(MyNumber) - 3)

iCount = 0
Do While MyNumber <> ""
'Strip last two digits
Temp = Right(MyNumber, 2)
If Len(MyNumber) = 1 Then
Words = ConvertDigit(Temp) & Place(iCount) & Words
MyNumber = Left(MyNumber, Len(MyNumber) - 1)
 
Else
Words = ConvertTens(Temp) & Place(iCount) & Words
MyNumber = Left(MyNumber, Len(MyNumber) - 2)
End If
iCount = iCount + 2
Loop
'================end of the if condition======
End If
'========changed the display to show Rs. XYZ Only==
CurrencyToWord = "Rs. " & Words & Hundreds & Paisa & " Only"
 
End Function
 
' Conversion for hundreds
'*****************************************
Private Function ConvertHundreds(ByVal MyNumber)
Dim Result As String
 
' Exit if there is nothing to convert.
If Val(MyNumber) = 0 Then Exit Function
 
' Append leading zeros to number.
MyNumber = Right("000" & MyNumber, 3)
 
' Do we have a hundreds place digit to convert?
If Left(MyNumber, 1) <> "0" Then
Result = ConvertDigit(Left(MyNumber, 1)) & " Hundred "
End If
 
' Do we have a tens place digit to convert?
If Mid(MyNumber, 2, 1) <> "0" Then
Result = Result & ConvertTens(Mid(MyNumber, 2))
Else
' If not, then convert the ones place digit.
Result = Result & ConvertDigit(Mid(MyNumber, 3))
End If
 
ConvertHundreds = Trim(Result)
End Function
 
' Conversion for tens
'*****************************************
Private Function ConvertTens(ByVal MyTens)
Dim Result As String
 
' Is value between 10 and 19?
If Val(Left(MyTens, 1)) = 1 Then
Select Case Val(MyTens)
Case 10: Result = "Ten"
Case 11: Result = "Eleven"
Case 12: Result = "Twelve"
Case 13: Result = "Thirteen"
Case 14: Result = "Fourteen"
Case 15: Result = "Fifteen"
Case 16: Result = "Sixteen"
Case 17: Result = "Seventeen"
Case 18: Result = "Eighteen"
Case 19: Result = "Nineteen"
Case Else
End Select
Else
' .. otherwise it's between 20 and 99.
Select Case Val(Left(MyTens, 1))
Case 2: Result = "Twenty "
Case 3: Result = "Thirty "
Case 4: Result = "Forty "
Case 5: Result = "Fifty "
Case 6: Result = "Sixty "
Case 7: Result = "Seventy "
Case 8: Result = "Eighty "
Case 9: Result = "Ninety "
Case Else
End Select
 
' Convert ones place digit.
Result = Result & ConvertDigit(Right(MyTens, 1))
End If
 
ConvertTens = Result
End Function
 
Private Function ConvertDigit(ByVal MyDigit)
Select Case Val(MyDigit)
Case 1: ConvertDigit = "One"
Case 2: ConvertDigit = "Two"
Case 3: ConvertDigit = "Three"
Case 4: ConvertDigit = "Four"
Case 5: ConvertDigit = "Five"
Case 6: ConvertDigit = "Six"
Case 7: ConvertDigit = "Seven"
Case 8: ConvertDigit = "Eight"
Case 9: ConvertDigit = "Nine"
Case Else: ConvertDigit = ""
End Select
End Function
 


GeneralRe: Bug in the code and a workaround [modified] PinmemberVidyadhar B.C.18:55 14 Oct '07  
Questionhow do i use? PinmemberMember #39023756:15 8 Mar '07  
GeneralPls specify the function or the formula to be used in MS Excel/Access [modified] PinmemberSuresh Kardar20:13 8 Oct '06  
GeneralDigit to word conversion program-reg PinmemberS.PRAKASH21:17 7 Jul '06  
GeneralSolved my Problem Pinmembertmistry22:22 23 May '06  
GeneralThousand Digit Not define Properly PinmemberJohn dsoza2:57 28 Apr '06  
GeneralUnable to use the function in access 2003 PinmemberDnyanraj0:51 17 Jan '06  
GeneralWant to use the same for other application Pinmembergotspatel4:08 1 Feb '05  
GeneralProblem in Conversion PinmemberKrishna Kumar Menon2:55 30 Aug '04  
GeneralGreat, but... PinmemberSnyp16:45 17 Feb '04  
GeneralRe: Great, but... PinmemberP.K.Agarwal17:06 19 Feb '04  
GeneralRe: Great, but... PinmemberP.K.Agarwal17:10 19 Feb '04  

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.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120210.1 | Last Updated 17 Feb 2004
Article Copyright 2004 by P.K.Agarwal
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid