|
-
January 3rd, 2000, 10:55 PM
#1
Converting Numbers to Words
How do i convert a number field..i.e in case the no is 5,432 then i want to print it as Five Thousand Four Hundred and Thirty Two.
-
January 5th, 2000, 03:48 AM
#2
Re: Converting Numbers to Words
Searching different web pages, I found the next address: http://www.vb-world.net/tips/tip108.html
Hope it will help you.
-
January 5th, 2000, 05:52 PM
#3
Re: Converting Numbers to Words
-
January 6th, 2000, 03:52 AM
#4
Re: Converting Numbers to Words
Here's a sample I've had on my harddisk for longer than I can remember (hence, I can't remember who originally wrote it). It takes a 'double' value (eg. 12345.67) and returns the value such as "One thousand, two hundred thirty-four and 56/100" :
(note that the numbering is in US format for millions and trillions - you may need to change this depending on your location).
private Function NumToText(dblVal as Double) as string
static sOnes(0 to 9) as string
static sTeens(0 to 9) as string
static sTens(0 to 9) as string
static sThousands(0 to 4) as string
static bInit as Boolean
'
Dim i as Integer
Dim bAllZeros as Boolean
Dim bShowsThousands as Boolean
Dim sValue as string
Dim sBuffer as string
Dim sTemp as string
Dim iCol as Integer
Dim iChar as Integer
'
' Warning - this routine only handles positive values
'
Debug.Assert dblVal > 0
'
If bInit = false then
'Initialize array
bInit = true
sOnes(0) = "zero"
sOnes(1) = "one"
sOnes(2) = "two"
sOnes(3) = "three"
sOnes(4) = "four"
sOnes(5) = "five"
sOnes(6) = "six"
sOnes(7) = "seven"
sOnes(8) = "eight"
sOnes(9) = "nine"
sTeens(0) = "ten"
sTeens(1) = "eleven"
sTeens(2) = "twelve"
sTeens(3) = "thirteen"
sTeens(4) = "fourteen"
sTeens(5) = "fifteen"
sTeens(6) = "sixteen"
sTeens(7) = "seventeen"
sTeens(8) = "eighteen"
sTeens(9) = "nineteen"
sTens(0) = ""
sTens(1) = "ten"
sTens(2) = "twenty"
sTens(3) = "thirty"
sTens(4) = "forty"
sTens(5) = "fifty"
sTens(6) = "sixty"
sTens(7) = "seventy"
sTens(8) = "eighty"
sTens(9) = "ninety"
sThousands(0) = ""
sThousands(1) = "thousand" 'US numbering
sThousands(2) = "million"
sThousands(3) = "billion"
sThousands(4) = "trillion"
End If
'
' Setup error Handler
'
on error GoTo vbErrorHandler
'
' get fractional part of value (if any)
'
sBuffer = "and " & Format$((dblVal - Int(dblVal)) * 100, "00") & "/100"
'
' Convert main part to string
'
sValue = CStr(Int(dblVal))
'
bAllZeros = true
'
for i = len(sValue) to 1 step -1
iChar = Val(mid$(sValue, i, 1))
iCol = (len(sValue) - i) + 1
'
'Action depends on 1's, 10's or 100's column
'
Select Case (iCol Mod 3)
Case 1 '1's position
bShowsThousands = true
If i = 1 then
sTemp = sOnes(iChar) & " "
ElseIf mid$(sValue, i - 1, 1) = "1" then
sTemp = sTeens(iChar) & " "
i = i - 1
ElseIf iChar > 0 then
sTemp = sOnes(iChar) & " "
else
bShowsThousands = false
If mid$(sValue, i - 1, 1) <> "0" then
bShowsThousands = true
ElseIf i > 2 then
If mid$(sValue, i - 2, 1) <> "0" then
bShowsThousands = true
End If
End If
sTemp = ""
End If
If bShowsThousands then
If iCol > 1 then
sTemp = sTemp & sThousands(iCol \ 3)
If bAllZeros then
sTemp = sTemp & " "
else
sTemp = sTemp & ", "
End If
End If
bAllZeros = false
End If
sBuffer = sTemp & sBuffer
Case 2
If iChar > 0 then
If mid$(sValue, i + 1, 1) <> "0" then
sBuffer = sTens(iChar) & "-" & sBuffer
else
sBuffer = sTens(iChar) & " " & sBuffer
End If
End If
Case 0
If iChar > 0 then
sBuffer = sOnes(iChar) & " hundred " & sBuffer
End If
End Select
next i
'
sBuffer = UCase$(Left$(sBuffer, 1)) & mid$(sBuffer, 2)
'
EndNumToText:
NumToText = sBuffer
Exit Function
'
vbErrorHandler:
sBuffer = "#error#"
resume EndNumToText
End Function
Chris Eastwood
CodeGuru - the website for developers
http://codeguru.developer.com/vb
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|