Click here to Skip to main content
15,889,651 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.2K   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 
GeneralBug in the code and a workaround Pin
kunmun2314-Jul-07 7:53
kunmun2314-Jul-07 7:53 
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] 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.