web
You’re offline. This is a read only version of the page.
close
Skip to main content
Community site session details

Community site session details

Session Id :
Customer experience | Sales, Customer Insights,...
Unanswered

SSRS Report (Convert Number into words)

(0) ShareShare
ReportReport
Posted on by 142

Hii,

I want to convert number into words in SSRS Report using Report builder 

For example - 25916.67 convert it into words -- twenty five thousand nine hundred sixteen and fils sixty seven only

Below is the code working fine with 25916 but not working on decimal places.

Function ConvertNumToWord(ByVal InputAmount)
Dim WAmount, Temp
Dim DecimalPlace, Count
Dim Place(9) As String
Place(2) = " Thousand "
Place(3) = " Million "
Place(4) = " Billion "
Place(5) = " Trillion "
' Inputed Amout Represented as a String.
InputAmount = Trim(Str(InputAmount))
' Position of decimal place.
DecimalPlace = InStr(InputAmount, ".")

Count = 1
Do While InputAmount <> ""
Temp = GetHundreds(Right(InputAmount, 3))
If Temp <> "" Then WAmount = Temp & Place(Count) & WAmount
If Len(InputAmount) > 3 Then
InputAmount = Left(InputAmount, Len(InputAmount) - 3)
Else
InputAmount = ""
End If
Count = Count + 1
Loop

ConvertNumToWord = WAmount & " Only"
End Function
' Convert From amount range 100-999 into text
Function GetHundreds(ByVal InputAmount)
Dim Result As String
If Val(InputAmount) = 0 Then Exit Function
InputAmount = Right("000" & InputAmount, 3)
' conversation of hundreds place.
If Mid(InputAmount, 1, 1) <> "0" Then
Result = GetDigit(Mid(InputAmount, 1, 1)) & " Hundred "
End If
' Conversation of tens and ones place.
If Mid(InputAmount, 2, 1) <> "0" Then
Result = Result & GetTens(Mid(InputAmount, 2))
Else
Result = Result & GetDigit(Mid(InputAmount, 3))
End If
GetHundreds = Result
End Function

'Convertion From amount range 10-99 into text
Function GetTens(TensText)
Dim Result As String
Result = ""
' Set Value for amount between 10-19
If Val(Left(TensText, 1)) = 1 Then
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
' Set Value for amount between 20-99
Else
Select Case Val(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 _
(Right(TensText, 1)) ' Retrieve ones place.
End If
GetTens = Result
End Function

'Convertion From amount range 1-9 into text
Function GetDigit(Digit)
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
End Function

I have the same question (0)
  • Sumedha Profile Picture
    142 on at
    RE: SSRS Report (Convert Number into words)

    Hii,

    I try this code but it's not working .

    Below is the code which is proper working when report preview is on but when report is upload in powerapp it will not upload.

    ERROR -- this report can’t upload because there are restrictions with SQL Server Reporting Services reports when Report Definition Language (RDL) Sandboxing is enabled. For on-premises RDL Sandboxing, contact your system administrator. More information: RDL sandboxing for Microsoft Dynamics 365 Online.

    Function SpellNumber(ByVal MyNumber)

    Dim Dirhams, Fils, Temp

    Dim DecimalPlace, Count

    Dim Place(9) As String

    Place(2) = " Thousand "

    Place(3) = " Million "

    Place(4) = " Billion "

    Place(5) = " Trillion "

    ' String representation of amount.

    MyNumber = Trim(Str(MyNumber))

    ' Position of decimal place 0 if none.

    DecimalPlace = InStr(MyNumber, ".")

    ' Convert Fils and set MyNumber to Dirhams amount.

    If DecimalPlace > 0 Then

    Fils = GetTens(Left(Mid(MyNumber, DecimalPlace + 1) & _

    "00", 2))

    MyNumber = Trim(Left(MyNumber, DecimalPlace - 1))

    End If

    Count = 1

    Do While MyNumber <> ""

    Temp = GetHundreds(Right(MyNumber, 3))

    If Temp <> "" Then Dirhams = Temp & Place(Count) & Dirhams

    If Len(MyNumber) > 3 Then

    MyNumber = Left(MyNumber, Len(MyNumber) - 3)

    Else

    MyNumber = ""

    End If

    Count = Count + 1

    Loop

    Select Case Dirhams

    Case ""

    Dirhams = "No Dirhams"

    Case "One"

    Dirhams = "One Dirhams"

    Case Else

    Dirhams = Dirhams & " Dirhams"

    End Select

    Select Case Fils

    Case ""

    Fils = " "

    Case "One"

    Fils = " and One Fils"

    Case Else

    Fils = " and " & Fils & " Fils"

    End Select

    SpellNumber = Dirhams & Fils

    End Function

    ' Converts a number from 100-999 into text

    Function GetHundreds(ByVal MyNumber)

    Dim Result As String

    If Val(MyNumber) = 0 Then Exit Function

    MyNumber = 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

    End Function

    ' Converts a number from 10 to 99 into text.

    Function GetTens(TensText)

    Dim Result As String

    Result = "" ' Null out the temporary function value.

    If Val(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(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 _

    (Right(TensText, 1)) ' Retrieve ones place.

    End If

    GetTens = Result

    End Function

    ' Converts a number from 1 to 9 into text.

    Function GetDigit(Digit)

    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

    End Function

  • Luis Arellano Profile Picture
    36 on at
    RE: SSRS Report (Convert Number into words)

    Hello!

    The reason it is not working is that you are sending the dot and decimal part to the GetHundreds function. Try with this and please note that I tried to modify your code the least possible and that there is a limit on the decimals supported by this code:

    Function ConvertNumToWord(ByVal InputAmount)
        Dim WAmount, Temp
        Dim DecimalPlace, Count
        Dim Decimals = ""
        Dim Place(9) As String
        Place(2) = " Thousand "
        Place(3) = " Million "
        Place(4) = " Billion "
        Place(5) = " Trillion "
    
        ' Position of decimal place.
        DecimalPlace = InputAmount Mod 1
    
        ' decimal value
        If DecimalPlace <> 0 Then ' Separate integer value from decimals
            Decimals = Split(InputAmount, ".")(1)
            InputAmount = Trim(Str(Int(InputAmount)))
        Else ' Inputed Amout Represented as a String.
            InputAmount = Trim(Str(InputAmount))
        End If
    
    
        Count = 1
        Do While InputAmount <> ""
            Temp = GetHundreds(Right(InputAmount, 3))
            If Temp <> "" Then WAmount = Temp & Place(Count) & WAmount
            If Len(InputAmount) > 3 Then
                InputAmount = Left(InputAmount, Len(InputAmount) - 3)
            Else
                InputAmount = ""
            End If
            Count = Count   1
        Loop
    
        If Decimals <> "" Then
            Temp = GetHundreds(Right(Decimals, 3))
            If Temp <> "" Then WAmount = WAmount & " and " & Temp
        End If
    
    
        ConvertNumToWord = WAmount & " Only"
    End Function

    EDIT: Removed unnecesary lines from code

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Andrés Arias – Community Spotlight

We are honored to recognize Andrés Arias as our Community Spotlight honoree for…

Leaderboard > Customer experience | Sales, Customer Insights, CRM

#1
Daniyal Khaleel Profile Picture

Daniyal Khaleel 141

#2
DAnny3211 Profile Picture

DAnny3211 134

#3
Abhilash Warrier Profile Picture

Abhilash Warrier 70 Super User 2025 Season 2

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans