12,405,868 members (69,452 online)
alternative version

34.4K views
12 bookmarked
Posted

# Simple Class to Convert Numbers into Text

, 11 Feb 2009 CPOL
 Rate this:
Takes numbers up to hundreds of trillions and converts them into text

## Introduction

This is a basic class that can be used to convert numbers to their equivalent word form.

## Background

I often saw, on the VB.Net forums, requests for a number to text conversion class, so I decided to make one. This converts any number from 0 to 999999999999.

## Using the code

The code is very simple to use. Simply add the class to your program and call `NumeriCon.ConvertNum(Input)` and pass the number desired to be converted as the `Input`.

`Textbox1.Text = NumeriCon.ConvertNum("878391279")  `

## Full Code

```Public Class NumeriCon

Public Shared Function ConvertNum(ByVal Input As Long) As String 'Call this function passing the number you desire to be changed
Dim output As String = Nothing
If Input < 1000 Then
output = FindNumber(Input) 'if its less than 1000 then just look it up
Else
Dim nparts() As String 'used to break the number up into 3 digit parts
Dim n As String = Input 'string version of the number
Dim i As Long = Input.ToString.Length 'length of the string to help break it up

Do Until i - 3 <= 0
n = n.Insert(i - 3, ",") 'insert commas to use as splitters
i = i - 3 'this insures that we get the correct number of parts
Loop
nparts = n.Split(",") 'split the string into the array

i = Input.ToString.Length 'return i to initial value for reuse
Dim p As Integer = 0 'p for parts, used for finding correct suffix
For Each s As String In nparts
Dim x As Long = CLng(s) 'x is used to compare the part value to other values
p = p + 1
If p = nparts.Length Then 'if p = number of elements in the array then we need to do something different
If x <> 0 Then
If CLng(s) < 100 Then
output = output & " And " & FindNumber(CLng(s)) ' look up the number, no suffix
Else                                                ' required as this is the last part
output = output & " " & FindNumber(CLng(s))
End If
End If
Else 'if its not the last element in the array
If x <> 0 Then
If output = Nothing Then 'we have to check this so we don't add a leading space
output = output & FindNumber(CLng(s)) & " " & FindSuffix(i, CLng(s)) 'look up the number and suffix
Else 'spaces must go in the right place
output = output & " " & FindNumber(CLng(s)) & " " & FindSuffix(i, CLng(s)) 'look up the snumber and suffix
End If
End If
End If
i = i - 3 'reduce the suffix counter by 3 to step down to the next suffix
Next
End If
Return output
End Function

Private Shared Function FindNumber(ByVal Number As Long) As String
Dim Words As String = Nothing
Dim Digits() As String = {"Zero","One","Two","Three","Four","Five","Six","Seven", _
"Eight","Nine","Ten"}
Dim Teens() As String = {"", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", _
"Eighteen", "Nineteen"}

If Number < 11 Then
Words = Digits(Number)

ElseIf Number < 20 Then
Words = Teens(Number - 10)

ElseIf Number = 20 Then
Words = "Twenty"

ElseIf Number < 30 Then
Words = "Twenty " & Digits(Number - 20)

ElseIf Number = 30 Then
Words = "Thirty"

ElseIf Number < 40 Then
Words = "Thirty " & Digits(Number - 30)

ElseIf Number = 40 Then
Words = "Fourty"

ElseIf Number < 50 Then
Words = "Fourty " & Digits(Number - 40)

ElseIf Number = 50 Then
Words = "Fifty"

ElseIf Number < 60 Then
Words = "Fifty " & Digits(Number - 50)

ElseIf Number = 60 Then
Words = "Sixty"

ElseIf Number < 70 Then
Words = "Sixty " & Digits(Number - 60)

ElseIf Number = 70 Then
Words = "Seventy"

ElseIf Number < 80 Then
Words = "Seventy " & Digits(Number - 70)

ElseIf Number = 80 Then
Words = "Eighty"

ElseIf Number < 90 Then
Words = "Eighty " & Digits(Number - 80)

ElseIf Number = 90 Then
Words = "Ninety"

ElseIf Number < 100 Then
Words = "Ninety " & Digits(Number - 90)

ElseIf Number < 1000 Then
Words = Number.ToString
Words = Words.Insert(1, ",")
Dim wparts As String() = Words.Split(",")
Words = FindNumber(wparts(0)) & " " & "Hundred"
Dim n As String = FindNumber(wparts(1))
If CLng(wparts(1)) <> 0 Then
Words = Words & " And " & n
End If
End If

Return Words
End Function

Private Shared Function FindSuffix(ByVal Length As Long, ByVal l As Long) As String
Dim word As String

If l <> 0 Then
If Length > 12 Then
word = "Trillion"
ElseIf Length > 9 Then
word = "Billion"
ElseIf Length > 6 Then
word = "Million"
ElseIf Length > 3 Then
word = "Thousand"
ElseIf Length > 2 Then
word = "Hundred"
Else
word = ""
End If
Else
word = ""
End If

Return word
End Function

End Class
```

## Share

 Australia
I am a Hobby programmer who works in the insurance industry as a broker. I also innovate within my role through building custom software to streamline processes.

## You may also be interested in...

 First Prev Next
 In article: Simple Class to Convert Numbers into Text imween22-Jan-15 23:04 imween 22-Jan-15 23:04
 need a help Member 1080574415-Jul-14 18:13 Member 10805744 15-Jul-14 18:13
 Thanks Member 858817021-Mar-12 1:18 Member 8588170 21-Mar-12 1:18
 Thaks Member 858817021-Mar-12 1:17 Member 8588170 21-Mar-12 1:17
 My vote of 1 psouza4micronet12-Feb-09 9:23 psouza4micronet 12-Feb-09 9:23
 Re: My vote of 1 The ANZAC14-Feb-09 15:42 The ANZAC 14-Feb-09 15:42
 My vote of 1 Dave Kreskowiak12-Feb-09 3:49 Dave Kreskowiak 12-Feb-09 3:49
 Being consequent doesn't seem to be your thing.... Johnny J.11-Feb-09 23:52 Johnny J. 11-Feb-09 23:52
 Last Visit: 31-Dec-99 18:00     Last Update: 29-Jul-16 17:31 Refresh 1