Click here to Skip to main content
15,889,858 members
Articles / Programming Languages / VBScript

Convert Currency To Words in Lakh, Crores, etc.

Rate me:
Please Sign up or sign in to vote.
3.26/5 (23 votes)
16 Feb 2004CPOL1 min read 184.3K   8.8K   24   15
Convert a given currency in words with Indian style digital grouping

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)


Written By
Systems Engineer
India India
I love to learn new technology specially IT related. Programming is my hobby.

Comments and Discussions

 
GeneralBugs corrected in the function [modified] Pin
Vidyadhar B.C.14-Oct-07 22:05
Vidyadhar B.C.14-Oct-07 22:05 
GeneralConvert Currency To Words Solved all problems Pin
Nair Sreekumar30-Jul-07 23:25
Nair Sreekumar30-Jul-07 23:25 
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 Pin
kunmun2314-Jul-07 7:53
kunmun2314-Jul-07 7:53 
GeneralRe: Bug in the code and a workaround [modified] Pin
Vidyadhar B.C.14-Oct-07 17:55
Vidyadhar B.C.14-Oct-07 17:55 
Questionhow do i use? Pin
pavanghai8-Mar-07 5:15
pavanghai8-Mar-07 5:15 
GeneralPls specify the function or the formula to be used in MS Excel/Access [modified] Pin
Suresh Kardar8-Oct-06 19:13
Suresh Kardar8-Oct-06 19:13 
GeneralDigit to word conversion program-reg Pin
S.PRAKASH7-Jul-06 20:17
S.PRAKASH7-Jul-06 20:17 
GeneralSolved my Problem Pin
tmistry23-May-06 21:22
tmistry23-May-06 21:22 
GeneralThousand Digit Not define Properly Pin
John dsoza28-Apr-06 1:57
John dsoza28-Apr-06 1:57 
GeneralUnable to use the function in access 2003 Pin
Dnyanraj16-Jan-06 23:51
Dnyanraj16-Jan-06 23:51 
GeneralWant to use the same for other application Pin
gotspatel1-Feb-05 3:08
gotspatel1-Feb-05 3:08 
GeneralProblem in Conversion Pin
Krishna Kumar Menon30-Aug-04 1:55
Krishna Kumar Menon30-Aug-04 1:55 
GeneralGreat, but... Pin
Snyp17-Feb-04 15:45
Snyp17-Feb-04 15:45 
GeneralRe: Great, but... Pin
P.K.Agarwal19-Feb-04 16:06
P.K.Agarwal19-Feb-04 16:06 
GeneralRe: Great, but... Pin
P.K.Agarwal19-Feb-04 16:10
P.K.Agarwal19-Feb-04 16:10 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.