Click here to Skip to main content
15,879,045 members
Please Sign up or sign in to vote.
3.00/5 (2 votes)
See more:
Hi,
I have just started to make an rdlc report for cash receipt .
I just want a program in vb.net to convert number amount into words.
for example:
Rs 12897 should be written as

"Twelve thousand eight hundred ninety seven only."
Posted

This[^] article will help you.
 
Share this answer
 
hi,

Something that looks like this?

VB
Public Class Converter
    Dim _mintnum As Integer

    Public Sub New(ByVal num As Integer)
        _mintnum = num
    End Sub

    Public Sub New()
        _mintnum = 0
    End Sub

    Public Shared Function Conversion(ByVal num As Integer) As String
        Dim res As String
        Dim part1 As String
        Dim part2 As String
        Dim part3 As String
        Dim numLength As Integer

        ' number length
        numLength = num.ToString.Length
        If numLength < 4 Then
            ' hundreds
            res = Reading3Digitnumber(num)
        End If
        If numLength > 3 And numLength < 7 Then
            part2 = Reading3Digitnumber(CType(num.ToString.Substring(num.ToString.Length - 3, 3).ToString, Integer))
            part1 = Reading3Digitnumber(CType(num.ToString.Substring(0, num.ToString.Length - 3).ToString, Integer))

            ' if (part1 = one) do not write
            If part1.Trim = "one" Then
                res = "thousand"
            Else
                res = part1 & " thousand"
            End If

            If part2.Trim <> "zero" Then
                res = res & " " & part2
            End If
            
        End If
        If numLength > 6 And numLength < 10 Then
            ' million
            part3 = Reading3Digitnumber(CType(num.ToString.Substring(num.ToString.Length - 3, 3).ToString, Integer))
            part2 = Reading3Digitnumber(CType(num.ToString.Substring(num.ToString.Length - 6, 3).ToString, Integer))
            part1 = Reading3Digitnumber(CType(num.ToString.Substring(0, num.ToString.Length - 6).ToString, Integer))
            If (part2.Trim = "zero") Then
                res = part1 & " million"
            ElseIf (part2.Trim = "one") Then
                res = part1 & " million" & " thousand"
            Else
                res = part1 & " million " & part2 & " thousand"
            End If
            If (part3.Trim <> "zero") Then
                res = res & " " & part3
            End If

        End If
        Return res
    End Function

    Private Shared Function Reading1Digitnumber(ByVal nb As Integer) As String

        Dim deZeroA9() As String = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
        Dim res As String = ""
        Dim i As Integer

        For i = 0 To 9
            If (CType(nb.ToString, Integer) = i) Then
                res = deZeroA9(i)
                Exit For
            End If
        Next
        Return res
    End Function

    Private Shared Function Reading2Digitnumber(ByVal nb As Integer) As String

        Dim from1To9() As String = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}
        Dim from11To19() As String =
                {"eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}
        Dim from10To90() As String =
                {"ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty",
                 "ninety"}
        Dim thenumbers() As Char
        thenumbers = nb.ToString.ToCharArray
        Dim res As String = ""
        Dim i As Integer
        If thenumbers(0) = "1" Then
            If (CType(thenumbers(1).ToString, Integer) = 0) Then
                res = from10To90(0)
            Else
                For i = 0 To 8
                    If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                        res = from11To19(i)
                        Exit For
                    End If
                Next

            End If
        End If
        If (thenumbers(0) = "2") _
           Or (thenumbers(0) = "3") _
           Or (thenumbers(0) = "4") _
           Or (thenumbers(0) = "5") _
           Or (thenumbers(0) = "6") _
           Or (thenumbers(0) = "8") Then

            ' if the second digit is a zero
            If (thenumbers(0) = "2") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then
                    res = from10To90(1)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(1)
                            res = res & " and " & from1To9(i)
                            Exit For
                        End If
                    Next
                End If
            End If

            If (thenumbers(0) = "3") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then

                    res = from10To90(2)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(2)
                            res = res & " and " & from1To9(i)
                            Exit For
                        End If
                    Next
                End If
            End If
            If (thenumbers(0) = "4") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then

                    res = from10To90(3)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(3)
                            res = res & " and " & from1To9(i)
                            Exit For
                        End If
                    Next
                End If
            End If
            If (thenumbers(0) = "5") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then

                    res = from10To90(4)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(4)
                            res = res & " and " & from1To9(i)
                            Exit For
                        End If
                    Next
                End If
            End If
            If (thenumbers(0) = "6") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then

                    res = from10To90(5)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(5)
                            res = res & " and " & from1To9(i)
                            Exit For
                        End If
                    Next
                End If
            End If
            If (thenumbers(0) = "8") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then

                    res = from10To90(7)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(7)
                            res = res & " and " & from1To9(i)
                            Exit For
                        End If
                    Next
                End If
            End If
        End If

        If (thenumbers(0) = "7") Or (thenumbers(0) = "9") Then
            ' if the second digit is a zero
            If (thenumbers(0) = "7") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then
                    res = from10To90(6)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(5)
                            res = res & " and " & from11To19(i)
                            Exit For
                        End If
                    Next
                End If
            End If
            If (thenumbers(0) = "9") Then
                If (CType(thenumbers(1).ToString, Integer) = 0) Then
                    res = from10To90(8)
                Else
                    For i = 0 To 8
                        If (CType(thenumbers(1).ToString, Integer) = i + 1) Then
                            res = from10To90(7)
                            res = res & " and " & from11To19(i)
                            Exit For
                        End If
                    Next
                End If
            End If
        End If
        Return res
    End Function

    Private Shared Function Reading3Digitnumber(ByVal nb As Integer) As String

        Dim from2To9() As String = {"two", "three", "four", "five", "six", "seven", "eight", "nine"}
        Const strCent As String = "hundred"
        Dim thenumbers() As Char
        Dim res As String = ""
        Dim i As Integer
        thenumbers = nb.ToString.ToCharArray


        Select Case nb.ToString.Length
            Case 1
                res = Reading1Digitnumber(nb)
            Case 2
                res = Reading2Digitnumber(nb)
            Case 3
                If thenumbers(0) = "1" Then
                    res = strCent
                Else
                    For i = 0 To 7
                        If CType(thenumbers(0).ToString, Integer) = i + 2 Then
                            res = from2To9(i) & " " & strCent
                        End If
                    Next
                End If
                If thenumbers(1) = "0" Then
                    Dim intermediatepart As String
                    intermediatepart = Reading1Digitnumber(CType(nb.ToString.Substring(2), Integer))
                    If intermediatepart <> "zero" Then
                        res = res & " " & intermediatepart
                    End If
                Else
                    res = res & " " & Reading2Digitnumber(CType(nb.ToString.Substring(1), Integer))
                End If

            Case Else

        End Select
        Return res
    End Function
End Class


Add 2 TextBox in your Form.

and then : TextBoxResult.Text = Converter.Conversion(CType(TextBoxNumber.Text.Trim, Integer))

PS: You may have to adapt because initially it was in French!

Bye.
Pascal
 
Share this answer
 
For a somewhat shorter solution, you should be able to translate from the following Python code:
VB
Units= ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "heighteen", "nineteen"]
Tens= ["", "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"]

def Append(a, b, Sep= " "):
    if len(b) == 0 or b[0] == " ":
        return a
    if len(a) == 0:
        return b
    else:
        return a + Sep + b

def Spell999(Number):
    Output= ""
    Pair= Number % 100
    Hundred= Number / 100

    # 0-- to 9--
    Output= Append(Output, Units[Hundred] + " hundred")

    if Pair < 20:
        # -00 to -19
        Output= Append(Output, Units[Pair])
    else:
        # -20 to -99
        Output= Append(Output, Append(Tens[Pair / 10], Units[Pair % 10], "-"))

    return Output

def Spell(Number):
    if Number == 0:
        # Trivial case
        return "zero"
    
    Output= ""    
    Units= Number % 1000
    Number/= 1000
    if Number > 0:
        Thousands= Number % 1000
        Number/= 1000
        if Number > 0:
            Millions= Number % 1000
            Number/= 1000
            if Number > 0:
                # 000--------- to 999---------
                Output= Append(Output, Spell999(Number) + " billion")  
            # ---000------ to ---999------
            Output= Append(Output, Spell999(Millions) + " million")    
        # ------000--- to ------999---
        Output= Append(Output, Spell999(Thousands) + " thousand")
    # ---------000 to ---------999
    Output= Append(Output, Spell999(Units))
        
    return Output
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900