Click here to Skip to main content
Licence CPOL
First Posted 16 Feb 2004
Views 99,692
Downloads 3,054
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  
I have tried to solve the problems. comment the paise if you do not want decimals.
 
Function CurrencyToWord(MyNumber)
 
Dim Temp
Dim Rupees
Dim Paisa
Dim DecimalPlace
Dim iCount
Dim Hundreds
Dim Words
ReDim Place(9)
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, ".")
 
' If we find decimal place...
If DecimalPlace > 0 Then
' Convert Paisa
'Temp = Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2)
Temp = Left(Mid(MyNumber, DecimalPlace + 1), 2)
if Len(Temp) = 1 then
Paisa = " and " & ConvertDigit(Temp) & " Paisa"
else
Paisa = " and " & ConvertTens(Temp) & " Paisa"
end if
 
' Strip off paisa from remainder to convert.
MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))
End If

If Cint(MyNumber) > 99 Then
' Convert last 3 digits of MyNumber to ruppees in word.
Hundreds = ConvertHundreds(Right(MyNumber, 3))
'MsgBox Hundreds & " Hundreds"

' Strip off last three digits
MyNumber = Left(MyNumber, Len(MyNumber) - 3)

iCount = 0
Do While MyNumber <> ""
'Strip last two digits
'MsgBox(MyNumber & " MyNumber")
Temp = Right(MyNumber, 2)
'MsgBox(Temp & " Temp")
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
if Trim(Words) = "Thousand" OR Trim(Words) = "Lakh" OR Trim(Words) = "Crore" OR Trim(Words) = "Arab" OR Trim(Words) = "Kharab" Then
Words = ""
end if
'MsgBox words & " words"
iCount = iCount + 2
Loop
Else
Temp = MyNumber
MsgBox Temp
Words = ConvertTens(Temp)
if Cint(Temp) = 1 then Words = "One"
'MyNumber = Left(MyNumber, Len(MyNumber) - 2)
End if
 
CurrencyToWord = "Ruppees " & Words & Hundreds & Paisa & " only"
 
End Function
 
' Conversion for hundreds
'*****************************************
Private Function ConvertHundreds(MyNumber)
Dim Result
 
' Exit if there is nothing to convert.
If CInt(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(MyTens)
Dim Result
 
' Is value between 10 and 19?
If Cint(Left(MyTens, 1)) = 1 Then
Select Case Cint(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 Cint(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.
if Len(MyTens) = 1 then
Result = ConvertDigit(MyTens)
else
Result = Result & ConvertDigit(Right(MyTens, 1))
end if
End If
 
ConvertTens = Result
End Function
 
Private Function ConvertDigit(MyDigit)
Select Case CInt(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
GeneralBug in the code and a workaround Pinmemberkunmun238:53 14 Jul '07  
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