In my aspx+vb web i have a numerical label in which amount is displayed.
Value is 174,798 and its converted to words as under : It should be One lakhs Seventy Four Thousand Seven Hundred and Ninty Eight
One Hundred Seventy-Four Thousand Seven Hundred Ninety-Eight
Code is as under
Public Function AmountInWords(ByVal nAmount As String, Optional ByVal wAmount _
As String = vbNullString, Optional ByVal nSet As Object = Nothing) As String
'Let's make sure entered value is numeric
If Not IsNumeric(nAmount) Then Return "Please enter numeric values only."
Dim tempDecValue As String = String.Empty : If InStr(nAmount, ".") Then _
tempDecValue = nAmount.Substring(nAmount.IndexOf("."))
nAmount = Replace(nAmount, tempDecValue, String.Empty)
Try
Dim intAmount As Long = nAmount
If intAmount > 0 Then
nSet = IIf((intAmount.ToString.Trim.Length / 3) _
> (CLng(intAmount.ToString.Trim.Length / 3)), _
CLng(intAmount.ToString.Trim.Length / 3) + 1, _
CLng(intAmount.ToString.Trim.Length / 3))
Dim eAmount As Long = Microsoft.VisualBasic.Left(intAmount.ToString.Trim, _
(intAmount.ToString.Trim.Length - ((nSet - 1) * 3)))
Dim multiplier As Long = 10 ^ (((nSet - 1) * 3))
Dim Ones() As String = _
{"", "One", "Two", "Three", _
"Four", "Five", _
"Six", "Seven", "Eight", "Nine"}
Dim Teens() As String = {"", _
"Eleven", "Twelve", "Thirteen", _
"Fourteen", "Fifteen", _
"Sixteen", "Seventeen", "Eighteen", "Nineteen"}
Dim Tens() As String = {"", "Ten", _
"Twenty", "Thirty", _
"Forty", "Fifty", "Sixty", _
"Seventy", "Eighty", "Ninety"}
Dim HMBT() As String = {"", "", _
"Thousand", "Million", _
"Billion", "Trillion", _
"Quadrillion", "Quintillion"}
intAmount = eAmount
Dim nHundred As Integer = intAmount \ 100 : intAmount = intAmount Mod 100
Dim nTen As Integer = intAmount \ 10 : intAmount = intAmount Mod 10
Dim nOne As Integer = intAmount \ 1
If nHundred > 0 Then wAmount = wAmount & _
Ones(nHundred) & " Hundred " 'This is for hundreds
If nTen > 0 Then 'This is for tens and teens
If nTen = 1 And nOne > 0 Then 'This is for teens
wAmount = wAmount & Teens(nOne) & " "
Else 'This is for tens, 10 to 90
wAmount = wAmount & Tens(nTen) & IIf(nOne > 0, "-", " ")
If nOne > 0 Then wAmount = wAmount & Ones(nOne) & " "
End If
Else 'This is for ones, 1 to 9
If nOne > 0 Then wAmount = wAmount & Ones(nOne) & " "
End If
wAmount = wAmount & HMBT(nSet) & " "
wAmount = AmountInWords(CStr(CLng(nAmount) - _
(eAmount * multiplier)).Trim & tempDecValue, wAmount, nSet - 1)
Else
If Val(nAmount) = 0 Then nAmount = nAmount & _
tempDecValue : tempDecValue = String.Empty
If (Math.Round(Val(nAmount), 2) * 100) > 0 Then wAmount = _
Trim(AmountInWords(CStr(Math.Round(Val(nAmount), 2) * 100), _
wAmount.Trim & "", 1)) & ""
End If
Catch ex As Exception
Return "Unable to Convert the Value"
End Try
'Trap null values
If IsNothing(wAmount) = True Then wAmount = String.Empty Else wAmount = _
IIf(InStr(wAmount.Trim.ToLower, " "), _
wAmount.Trim, wAmount.Trim & " ")
'Display the result
Return wAmount
End Function
In the code you provided, the amount is divided into thousands, and the lakhs you mentioned do not exist. If you need to implement this requirement, you could refer to the following code:
Private Shared Function ConvertDecimals(ByVal number As String) As String
Dim cd As String = "", digit As String = "", engOne As String = ""
For i As Integer = 0 To number.Length - 1
digit = number(i).ToString()
If digit.Equals("0") Then
engOne = "Zero"
Else
engOne = ones(digit)
End If
cd += " " & engOne
Next
Return cd
End Function
Private Shared Function ones(ByVal Number As String) As String
Dim _Number As Integer = Int32.Parse(Number)
Dim name As String = ""
Select Case _Number
Case 1
name = "One"
Case 2
name = "Two"
Case 3
name = "Three"
Case 4
name = "Four"
Case 5
name = "Five"
Case 6
name = "Six"
Case 7
name = "Seven"
Case 8
name = "Eight"
Case 9
name = "Nine"
End Select
Return name
End Function
Private Shared Function tens(ByVal Number As String) As String
Dim _Number As Integer = Int32.Parse(Number)
Dim name As String = Nothing
Select Case _Number
Case 10
name = "Ten"
Case 11
name = "Eleven"
Case 12
name = "Twelve"
Case 13
name = "Thirteen"
Case 14
name = "Fourteen"
Case 15
name = "Fifteen"
Case 16
name = "Sixteen"
Case 17
name = "Seventeen"
Case 18
name = "Eighteen"
Case 19
name = "Nineteen"
Case 20
name = "Twenty"
Case 30
name = "Thirty"
Case 40
name = "Fourty"
Case 50
name = "Fifty"
Case 60
name = "Sixty"
Case 70
name = "Seventy"
Case 80
name = "Eighty"
Case 90
name = "Ninety"
Case Else
If _Number > 0 Then
name = tens(Number.Substring(0, 1) & "0") & "-" + ones(Number.Substring(1))
End If
End Select
Return name
End Function
Private Shared Function AmountInWords(ByVal Number As String) As String
Number = Number.Replace(",", "")
Dim word As String = ""
Try
Dim beginsZero As Boolean = False
Dim isDone As Boolean = False
Dim dblAmt As Double = Double.Parse(Number)
If dblAmt > 0 Then
beginsZero = Number.StartsWith("0")
Dim numDigits As Integer = Number.Length
Dim pos As Integer = 0
Dim place As String = ""
Select Case numDigits
Case 1
word = ones(Number)
isDone = True
Case 2
word = tens(Number)
isDone = True
Case 3
pos = (numDigits Mod 3) + 1
place = " Hundred "
Case 4, 5
pos = (numDigits Mod 4) + 1
place = " Thousand "
Case 6
pos = (numDigits Mod 6) + 1
place = " lakhs "
Case 7, 8, 9
pos = (numDigits Mod 7) + 1
place = " Million "
Case 10, 11, 12
pos = (numDigits Mod 10) + 1
place = " Billion "
Case Else
isDone = True
End Select
If Not isDone Then
If Number.Substring(0, pos) <> "0" AndAlso Number.Substring(pos) <> "0" Then
Try
word = AmountInWords(Number.Substring(0, pos)) + place + AmountInWords(Number.Substring(pos))
Catch
End Try
Else
word = AmountInWords(Number.Substring(0, pos)) + AmountInWords(Number.Substring(pos))
End If
End If
If word.Trim().Equals(place.Trim()) Then word = ""
End If
Catch
End Try
Return word.Trim()
End Function
Private Shared Function ConvertToWords(ByVal numb As String) As String
Dim val As String = "", wholeNo As String = numb, points As String = "", andStr As String = "", pointStr As String = ""
Dim endStr As String = "Only"
Try
Dim decimalPlace As Integer = numb.IndexOf(".")
If decimalPlace > 0 Then
wholeNo = numb.Substring(0, decimalPlace)
points = numb.Substring(decimalPlace + 1)
If Int32.Parse(points) > 0 Then
andStr = "and"
endStr = "Paisa " & endStr
pointStr = ConvertDecimals(points)
End If
End If
val = String.Format("{0} {1}{2} {3}", AmountInWords(wholeNo).Trim(), andStr, pointStr, endStr)
Catch
End Try
Return val
End Function
Protected Sub convert_Click(sender As Object, e As EventArgs)
result.Text = AmountInWords(gttl.Text)
End Sub
The code includes the conversion of integers and decimals, you could also refer to this article.
.NET forums are moving to a new home on Microsoft Q&A, we encourage you to go to Microsoft Q&A for .NET for posting new questions and get involved today.
Member
299 Points
1172 Posts
Display Numerical in word format
Jan 21, 2021 10:25 AM|Baiju EP|LINK
In my aspx+vb web i have a numerical label in which amount is displayed.
Value is 174,798 and its converted to words as under : It should be One lakhs Seventy Four Thousand Seven Hundred and Ninty Eight
One Hundred Seventy-Four Thousand Seven Hundred Ninety-Eight
Code is as under
gttl.Text = String.Format("{0:N0}", dta2.Tables("PO_Items").Rows(0).Item(0))
wordstxt.Text = AmountInWords(gttl.Text)
Contributor
2080 Points
664 Posts
Re: Display Numerical in word format
Jan 22, 2021 09:29 AM|XuDong Peng|LINK
Hi Baiju EP,
In the code you provided, the amount is divided into thousands, and the lakhs you mentioned do not exist. If you need to implement this requirement, you could refer to the following code:
The code includes the conversion of integers and decimals, you could also refer to this article.
Convert Numeric Value Into Words (Currency) In C#
Result:
Best regards,
Xudong Peng
All-Star
52673 Points
15719 Posts
Re: Display Numerical in word format
Jan 24, 2021 01:18 PM|oned_gk|LINK
Maybe there are many js you can use
https://github.com/yamadapc/js-written-number
numeric word js
Suwandi - Non Graduate Programmer