Friday, June 1, 2012

Number To Word Conversion (Indian Format)

Number to Word Conversion in VB.net (Indian Format)
------------------------------------------------------------------------------------------------------------


 InWord = SpellIndian(InNumber)



 Function SpellIndian(ByVal MyNumber As String) As String

        '****************' Main Function *'****************
        Dim Rupees, Paise, Temp
        Dim DecimalPlace, Count
        Dim Place(9) As String
        Place(2) = " Thousand "
        Place(3) = " Lac "
        Place(4) = " Crore "
        Place(5) = " Arab " ' String representation of amount
        MyNumber = Trim(Str(MyNumber)) ' Position of decimal place 0 if none
        DecimalPlace = InStr(MyNumber, ".")
        ' Convert Paise and set MyNumber to Rupee amount
        If DecimalPlace > 0 Then
            Paise = GetTens(Microsoft.VisualBasic.Left(Mid(MyNumber, DecimalPlace + 1) & "00", 2))
            MyNumber = Trim(Microsoft.VisualBasic.Left(MyNumber, DecimalPlace - 1))
        End If
        Count = 1
        Do While MyNumber <> ""
            If Count = 1 Then Temp = GetHundreds(Microsoft.VisualBasic.Right(MyNumber, 3))
            If Count > 1 Then Temp = GetHundreds(Microsoft.VisualBasic.Right(MyNumber, 2))
            If Temp <> "" Then Rupees = Temp & Place(Count) & Rupees
            If Count = 1 And Len(MyNumber) > 3 Then
                MyNumber = Microsoft.VisualBasic.Left(MyNumber, Len(MyNumber) - 3)
            Else
                If Count > 1 And Len(MyNumber) > 2 Then
                    MyNumber = Microsoft.VisualBasic.Left(MyNumber, Len(MyNumber) - 2)
                Else
                    MyNumber = ""
                End If
            End If
            Count = Count + 1
        Loop
        Select Case Rupees
            Case ""
                Rupees = "No Rupees"
            Case "One"
                Rupees = "One Rupee"
            Case Else
                'Rupees = Rupees & " Rupees"
                'Rupees = "Rupees " & Rupees
                Rupees = "" & Rupees
        End Select
        Select Case Paise
            Case ""
             
                'Paise = ""
                Paise = " Only"
            Case "One"
                'Paise = " and One Paisa"
                Paise = " Only"
            Case Else
                'Paise = " and " & Paise & " Paise"
                Paise = " Only"

        End Select
        SpellIndian = Rupees & Paise
        Return (SpellIndian)
    End Function

    '*******************************************
    ' Converts a number from 100-999 into text *
    '*******************************************
    Function GetHundreds(ByVal MyNumber As String) As String
        Dim Result As String
        If Val(MyNumber) = 0 Then Exit Function
        MyNumber = Microsoft.VisualBasic.Right("000" & MyNumber, 3) 'Convert the hundreds place
        If Mid(MyNumber, 1, 1) <> "0" Then
            Result = GetDigit(Mid(MyNumber, 1, 1)) & " Hundred "
        End If
        'Convert the tens and ones place
        If Mid(MyNumber, 2, 1) <> "0" Then
            Result = Result & GetTens(Mid(MyNumber, 2))
        Else
            Result = Result & GetDigit(Mid(MyNumber, 3))
        End If
        GetHundreds = Result
        Return (GetHundreds)
    End Function

    '*********************************************
    ' Converts a number from 10 to 99 into text. *
    '*********************************************
    Function GetTens(ByVal TensText As String) As String
        Dim Result As String
        Result = "" ' null out the temporary function value
        If Val(Microsoft.VisualBasic.Left(TensText, 1)) = 1 Then ' If value between 10-19
            Select Case Val(TensText)
                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 ' If value between 20-99
            Select Case Val(Microsoft.VisualBasic.Left(TensText, 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
            Result = Result & GetDigit _
            (Microsoft.VisualBasic.Right(TensText, 1)) 'Retrieve ones place
        End If
        GetTens = Result
        Return (GetTens)
    End Function

    '*******************************************
    ' Converts a number from 1 to 9 into text. *
    '*******************************************
    Function GetDigit(ByVal Digit As String) As String
        Select Case Val(Digit)
            Case 1 : GetDigit = "One"
            Case 2 : GetDigit = "Two"
            Case 3 : GetDigit = "Three"
            Case 4 : GetDigit = "Four"
            Case 5 : GetDigit = "Five"
            Case 6 : GetDigit = "Six"
            Case 7 : GetDigit = "Seven"
            Case 8 : GetDigit = "Eight"
            Case 9 : GetDigit = "Nine"
            Case Else : GetDigit = ""
        End Select
        Return (GetDigit)
    End Function

No comments:

Post a Comment