• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[VB.NET] Code chuyển số thành chữ!!!

Các thủ thuật liên quan đến xử lý chuỗi và thời gian

Moderators: tungcan5diop, QUANITGROBEST

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

[VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 1:50 pm

Thủ thuật:
Tác giả: gửi bởi Kasper » T.Ba 11/11/2008 4:03 pm
Mô tả:


Code: Select all

  1.  
  2. Public Class DoiDonVi
  3.     Public Shared Function TienBangChu(ByVal sSoTien As String) As String
  4.         Dim DonVi() As String = {"", "nghìn ", "triệu ", "tỷ ", "nghìn ", "triệu "}
  5.         Dim so As String
  6.         Dim chuoi As String = ""
  7.         Dim temp As String
  8.         Dim id As Byte
  9.  
  10.         Do While (Not sSoTien.Equals(""))
  11.             If sSoTien.Length <> 0 Then
  12.                 so = getNum(sSoTien)
  13.                 sSoTien = Left(sSoTien, sSoTien.Length - so.Length)
  14.                 temp = setNum(so)
  15.                 so = temp
  16.                 If Not so.Equals("") Then
  17.                     temp = temp + DonVi(id)
  18.                     chuoi = temp + chuoi
  19.                 End If
  20.                 id = id + 1
  21.             End If
  22.         Loop
  23.         temp = UCase(Left(chuoi, 1))
  24.         Return temp & Right(chuoi, Len(chuoi) - 1) & "đồng."
  25.     End Function
  26.  
  27.     Private Shared Function getNum(ByVal sSoTien As String) As String
  28.         Dim so As String
  29.  
  30.         If sSoTien.Length >= 3 Then
  31.             so = Right(sSoTien, 3)
  32.         Else
  33.             so = Right(sSoTien, sSoTien.Length)
  34.         End If
  35.         Return so
  36.     End Function
  37.  
  38.     Private Shared Function setNum(ByVal sSoTien As String) As String
  39.         Dim chuoi As String = ""
  40.         Dim flag0 As Boolean
  41.         Dim flag1 As Boolean
  42.         Dim temp As String
  43.  
  44.         temp = sSoTien
  45.         Dim kyso() As String = {"không ", "một ", "hai ", "ba ", "bốn ", "năm ", "sáu ", "bảy ", "tám ", "chín "}
  46.         'Xet hang tram
  47.         If sSoTien.Length = 3 Then
  48.             If Not (Left(sSoTien, 1) = 0 And Left(Right(sSoTien, 2), 1) = 0 And Right(sSoTien, 1) = 0) Then
  49.                 chuoi = kyso(Left(sSoTien, 1)) + "trăm "
  50.             End If
  51.             sSoTien = Right(sSoTien, 2)
  52.         End If
  53.         'Xet hang chuc
  54.         If sSoTien.Length = 2 Then
  55.             If Left(sSoTien, 1) = 0 Then
  56.                 If Right(sSoTien, 1) <> 0 Then
  57.                     chuoi = chuoi + "linh "
  58.                 End If
  59.                 flag0 = True
  60.             Else
  61.                 If Left(sSoTien, 1) = 1 Then
  62.                     chuoi = chuoi + "mười "
  63.                 Else
  64.                     chuoi = chuoi + kyso(Left(sSoTien, 1)) + "mươi "
  65.                     flag1 = True
  66.                 End If
  67.             End If
  68.             sSoTien = Right(sSoTien, 1)
  69.         End If
  70.         'Xet hang don vi
  71.         If Right(sSoTien, 1) <> 0 Then
  72.             If Left(sSoTien, 1) = 5 And Not flag0 Then
  73.                 If temp.Length = 1 Then
  74.                     chuoi = chuoi + "năm "
  75.                 Else
  76.                     chuoi = chuoi + "lăm "
  77.                 End If
  78.             Else
  79.                 If Left(sSoTien, 1) = 1 And Not (Not flag1 Or flag0) And chuoi <> "" Then
  80.                     chuoi = chuoi + "mốt "
  81.                 Else
  82.                     chuoi = chuoi + kyso(Left(sSoTien, 1)) + ""
  83.                 End If
  84.             End If
  85.         Else
  86.         End If
  87.         Return chuoi
  88.     End Function
  89. End Class
  90.  


• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 1:51 pm

Thủ thuật:
Tác giả: gửi bởi hoangthu1974 » T.Tư 12/11/2008 9:09 am
Mô tả:


Code: Select all

  1.    '------------------------------------------------------------------
  2.     ' Function Name: Num2Text
  3.     ' Description  : Change the numeric to text speech
  4.     ' Author       : Hoang Thu
  5.     ' Date Create  : 23/12/2007
  6.     '------------------------------------------------------------------
  7.     Function Num2Text(ByVal s As String, Optional ByVal Local As Boolean = False) As String
  8.         'Optional ByVal Local As Boolean = False 'Nam Kỳ Reading
  9.         'Optional ByVal Local As Boolean = True 'Bắc Kỳ Reading
  10.         Dim DS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator
  11.         Dim GS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator
  12.         Dim fDS As Boolean = False
  13.         Dim fDecAdd As Boolean = False
  14.         Dim so() As String = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}
  15.         Dim hang() As String = {"", "ngàn", "triệu", "tỷ"}
  16.         If Local Then
  17.             hang(1) = "nghìn"
  18.         End If
  19.         Dim i, j, cntDS, donvi, chuc, tram As Integer
  20.         Dim str As String
  21.         str = ""
  22.         s = s.Replace(GS, "")
  23.         If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)
  24.  
  25.         i = s.Length
  26.         While s.Substring(0, 1) = "0"
  27.             s = s.Substring(1, s.Length - 1)
  28.         End While
  29.         If s.Substring(0, 1) = DS Then s = "0" & s
  30.         cntDS = 0
  31.         If InStr(s, DS) Then
  32.             For i = 0 To s.Length - 1 Step 1
  33.                 If s.Substring(i, 1) = DS Then
  34.                     cntDS += 1
  35.                 End If
  36.             Next
  37.         End If
  38.         If cntDS > 1 Then Return ""
  39.         If cntDS > 0 Then
  40.             While s.Substring(s.Length - 1, 1) = "0"
  41.                 s = s.Substring(0, s.Length - 1)
  42.             End While
  43.         End If
  44.         If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)
  45.  
  46.         i = s.Length - 1
  47.         If i = 0 Then
  48.             str = ""
  49.         Else
  50.             j = 0
  51.             Do While i >= 0
  52.                 If s.Substring(i, 1) = DS Then
  53.                     fDS = True
  54.                     i -= 1
  55.                     GoTo DecimalAdd
  56.                 Else
  57.                     donvi = Int(s.Substring(i, 1))
  58.                     i -= 1
  59.                 End If
  60.  
  61.                 If i > -1 Then
  62.                     If s.Substring(i, 1) = DS Then
  63.                         i -= 1
  64.                         chuc = -1
  65.                         tram = -1
  66.                         fDS = True
  67.                         GoTo NumberRead
  68.                     Else
  69.                         chuc = Int(s.Substring(i, 1))
  70.                     End If
  71.                 Else
  72.                     chuc = -1
  73.                 End If
  74.                 i -= 1
  75.  
  76.                 If i > -1 Then
  77.                     If s.Substring(i, 1) = DS Then
  78.                         i -= 1
  79.                         tram = -1
  80.                         fDS = True
  81.                         GoTo NumberRead
  82.                     Else
  83.                         tram = Int(s.Substring(i, 1))
  84.                     End If
  85.                 Else
  86.                     tram = -1
  87.                 End If
  88.                 i -= 1
  89. NumberRead:
  90.                 If donvi > 0 Or chuc > 0 Or tram > 0 Or j = 3 Then str = hang(j) & " " & str
  91.                 j += 1
  92.  
  93.                 If j > 3 Then j = 1
  94.  
  95.                 If donvi = 1 And chuc > 1 Then
  96.                     str = "mốt" & " " & str
  97.                 ElseIf donvi = 4 And chuc > 1 Then
  98.                     If Local Then
  99.                         str = "tư" & " " & str
  100.                     Else
  101.                         str = so(donvi) & " " & str
  102.                     End If
  103.                 ElseIf donvi = 5 Then
  104.                     If chuc > 0 Then
  105.                         str = "lăm" & " " & str
  106.                     Else
  107.                         str = so(donvi) & " " & str
  108.                     End If
  109.                 Else
  110.                     If donvi <> 0 Then str = so(donvi) & " " & str
  111.                 End If
  112.  
  113.                 If chuc < 0 Then
  114.                     If Not fDS Then Exit Do
  115.                 Else
  116.                     If chuc = 0 And donvi > 0 Then
  117.                         str = "lẻ" & " " & str
  118.                     ElseIf chuc = 1 Then
  119.                         str = "mười" & " " & str
  120.                     ElseIf chuc > 1 Then
  121.                         str = so(chuc) & " " & "mươi" & " " & str
  122.                     End If
  123.                 End If
  124.                 If tram < 0 Then
  125.                     If Not fDS Then Exit Do
  126.                 Else
  127.                     If tram > 0 Or chuc > 0 Or donvi > 0 Then
  128.                         str = so(tram) & " " & "trăm" & " " & str
  129.                     End If
  130.                 End If
  131. DecimalAdd:
  132.                 If fDS Then
  133.                     str = "phảy " & str
  134.                     j = 0
  135.                     fDS = False
  136.                     fDecAdd = True
  137.                 End If
  138.             Loop
  139.         End If
  140.  
  141.         If str.Length > 0 Then
  142.             str = str.Trim
  143.             str = str.Replace("  ", " ")
  144.             str = UCase(str.Substring(0, 1)) & str.Substring(1, str.Length - 1)
  145.             Return str
  146.         Else
  147.             Return ""
  148.         End If
  149.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 2:04 pm

Thủ thuật:
Tác giả: gửi bởi thanhbinhna vào ngày Chủ nhật 20/05/2007 3:09 pm
Mô tả:


khá sơ sài nhưng gọn, chuyển từ VB6

Code: Select all

  1.    Public Function Tienchu(ByVal sotien As Double) As String
  2.         Dim tien(4) As String
  3.         Dim chu, tmpchuoi, bakytu As String
  4.         Dim i As Integer
  5.         tien(0) = " tỷ"
  6.         tien(1) = " triệu"
  7.         tien(2) = " nghìn"
  8.         tien(3) = "đồng"
  9.         chu = ""
  10.         If sotien < 0 Then
  11.             chu = chu & " Tru"
  12.         End If
  13.         tmpchuoi = Microsoft.VisualBasic.Right(Space(12) & CStr(sotien), 12)
  14.         For i = 1 To 4
  15.             bakytu = Trim(Mid(tmpchuoi, i * 3 - 2, 3))
  16.             If bakytu <> "" Then
  17.                 chu = chu & doisochu(CInt(bakytu))
  18.                 chu = chu & tien(i - 1) & ""
  19.             End If
  20.         Next
  21.         If chu = "đồng" Then
  22.             chu = "Không đồng"
  23.         End If
  24.         Tienchu = chu
  25.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 2:08 pm

Thủ thuật:
Tác giả: gửi bởi anhlt vào ngày Thứ 2 25/06/2007 5:39 pm
Mô tả:


code này dài ghê :))

Code: Select all

  1.    Function num2Text(ByVal str1 As String) As String
  2.         Dim str As String
  3.         Dim i As Integer
  4.         Dim tg As String
  5.         Dim j As Integer
  6.         Dim sval As Integer
  7.         Dim sSo As String
  8.         Dim sNum2Text As String
  9.         Dim k As Integer
  10.         Dim l As Integer
  11.         str = str1
  12.         i = len(str)
  13.         k = i \ 3
  14.         l = 0
  15.         Do While l <= k
  16.             If l < k Then
  17.                 tg = mid(str, i - (l + 1) * 3 + 1, 3)
  18.             Else
  19.                 tg = Microsoft.VisualBasic.Left(str, i - l * 3)
  20.             End If
  21.             sSo = ""
  22.             For j = 1 To len(tg)
  23.                 sval = val(mid(tg, len(tg) - j + 1, 1))
  24.                 Select Case sval
  25.                     Case 0
  26.                         Select Case j
  27.                             Case 3
  28.                                 If val(tg) > 0 Then
  29.                                     sSo = "không trăm " & sso
  30.                                 End If
  31.                             Case 2
  32.                                 If val(mid(tg, 3, 1)) > 0 Then
  33.                                     sSo = "linh " & sso
  34.                                 End If
  35.                             Case 1
  36.  
  37.                         End Select
  38.                     Case 1
  39.                         Select Case j
  40.                             Case 3
  41.                                 sSo = "một trăm " & sso
  42.                             Case 2
  43.                                 sSo = "mười " & sso
  44.                             Case 1
  45.                                 If len(tg) > 1 And val(mid(tg, 2, 1)) > 1 Then
  46.                                     sSo = "mốt" & sso
  47.                                 Else
  48.                                     sSo = "một" & sso
  49.                                 End If
  50.                         End Select
  51.                     Case 2
  52.                         Select Case j
  53.                             Case 3
  54.                                 sSo = "hai trăm " & sso
  55.                             Case 2
  56.                                 sSo = "hai mươi " & sso
  57.                             Case 1
  58.                                 sSo = "hai" & sso
  59.                         End Select
  60.                     Case 3
  61.                         Select Case j
  62.                             Case 3
  63.                                 sSo = "ba trăm " & sso
  64.                             Case 2
  65.                                 sSo = "ba mươi " & sso
  66.                             Case 1
  67.                                 sSo = "ba" & sso
  68.                         End Select
  69.                     Case 4
  70.                         Select Case j
  71.                             Case 3
  72.                                 sSo = "bốn trăm " & sso
  73.                             Case 2
  74.                                 sSo = "bốn mươi " & sso
  75.                             Case 1
  76.                                 sSo = "bốn" & sso
  77.                         End Select
  78.                     Case 5
  79.                         Select Case j
  80.                             Case 3
  81.                                 sSo = "năm trăm " & sso
  82.                             Case 2
  83.                                 sSo = "năm mươi " & sso
  84.                             Case 1
  85.                                 If len(tg) > 1 And val(mid(tg, 2, 1)) >= 1 Then
  86.                                     sSo = "lăm " & sso
  87.                                 Else
  88.                                     sSo = "năm " & sso
  89.                                 End If
  90.                         End Select
  91.                     Case 6
  92.                         Select Case j
  93.                             Case 3
  94.                                 sSo = "sáu trăm " & sso
  95.                             Case 2
  96.                                 sSo = "sáu mươi " & sso
  97.                             Case 1
  98.                                 sSo = "sáu" & sso
  99.                         End Select
  100.                     Case 7
  101.                         Select Case j
  102.                             Case 3
  103.                                 sSo = "bảy trăm " & sso
  104.                             Case 2
  105.                                 sSo = "bảy mươi " & sso
  106.                             Case 1
  107.                                 sSo = "bảy" & sso
  108.                         End Select
  109.                     Case 8
  110.                         Select Case j
  111.                             Case 3
  112.                                 sSo = "tám trăm " & sso
  113.                             Case 2
  114.                                 sSo = "tám mươi " & sso
  115.                             Case 1
  116.                                 sSo = "tám" & sso
  117.                         End Select
  118.                     Case 9
  119.                         Select Case j
  120.                             Case 3
  121.                                 sSo = "chín trăm " & sso
  122.                             Case 2
  123.                                 sSo = "chín mươi " & sso
  124.                             Case 1
  125.                                 sSo = "chín" & sso
  126.                         End Select
  127.                 End Select
  128.             Next
  129.             Select Case l
  130.                 Case 1, 4
  131.                     If sso <> "" Then
  132.                         snum2text = sso & " nghìn" & " " & snum2text
  133.                     End If
  134.                 Case 2, 5
  135.                     If sso <> "" Then
  136.                         snum2text = sso & " triệu" & " " & snum2text
  137.                     End If
  138.                 Case 3, 6
  139.                     If sso <> "" Then
  140.                         snum2text = sso & " tỷ" & " " & snum2text
  141.                     End If
  142.                 Case Else
  143.                     snum2text = sso
  144.             End Select
  145.             l = l + 1
  146.         Loop
  147.         num2Text = snum2text
  148.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 2:13 pm

Thủ thuật:
Tác giả: gửi bởi PhamTienSinh vào ngày Thứ 4 18/07/2007 3:06 pm
Mô tả:


Code: Select all

  1.   Public Class NumBer2TextBase
  2.         Private strDigit As String() = {"không ", "một ", "hai ", "ba ", "bốn ", "năm ", _
  3.          "sáu ", "bảy ", "tám ", "chín "}
  4.         Private strGroup As String() = {"nghìn ", "triệu ", "tỷ "}
  5.  
  6.         Public Function Transtalte(ByVal iNum As String) As String
  7.             Try
  8.                 Dim iG As Short
  9.                 Dim k As Byte = 0
  10.                 Dim st As String, s As String = ""
  11.                 For i As Short = CShort((iNum.Length - 6)) To iNum.Length Mod 3 Step -3
  12.                     iG = Short.Parse(iNum.Substring(i, 3))
  13.                     st = Group3(iG)
  14.                     If st <> "" Then
  15.                         st += strGroup(k)
  16.                     ElseIf k Mod 3 = 2 Then
  17.                         st = strGroup(k)
  18.                     End If
  19.                     k = CByte(((k + 1) Mod 3))
  20.                     s = st + s
  21.                 Next
  22.                 If iNum.Length Mod 3 <> 0 AndAlso iNum.Length > 3 Then
  23.                     iG = Short.Parse(iNum.Substring(0, iNum.Length Mod 3))
  24.                     st = Group3(iG)
  25.                     st += strGroup(k)
  26.                     s = st + s
  27.                 End If
  28.                 s = s + Group3(Short.Parse(iNum.Substring(Math.Max(iNum.Length - 3, 0))))
  29.                 If s = "" Then
  30.                     s = "không"
  31.                 ElseIf s.Substring(0, 13) = "không trăm lẻ" Then
  32.                     s = s.Substring(14)
  33.                 ElseIf s.Substring(0, 11) = "không trăm " Then
  34.                     s = s.Substring(11)
  35.                 End If
  36.                 Return s
  37.             Catch ex As Exception
  38.                 Return Nothing
  39.             End Try
  40.         End Function
  41.  
  42.         Private Function Group3(ByVal iNum As Short) As String
  43.             Dim iDg As Byte() = New Byte(2) {}
  44.             Dim sResult As String() = New String(2) {}
  45.             If iNum = 0 Then
  46.                 Return ""
  47.             End If
  48.  
  49.             iDg(2) = CByte((iNum / 100))
  50.             iDg(1) = CByte(((iNum / 10) Mod 10))
  51.             iDg(0) = CByte((iNum Mod 10))
  52.  
  53.             sResult(2) = strDigit(iDg(2)) + "trăm "
  54.             If iDg(1) >= 2 Then
  55.                 sResult(1) = strDigit(iDg(1)) + "mươi "
  56.             ElseIf iDg(1) = 1 Then
  57.                 sResult(1) = "mười "
  58.             ElseIf iDg(1) = 0 Then
  59.                 sResult(1) = "lẻ "
  60.             End If
  61.  
  62.             sResult(0) = strDigit(iDg(0))
  63.  
  64.             If iDg(0) = 0 Then
  65.                 sResult(0) = ""
  66.                 If iDg(1) = 0 Then
  67.                     sResult(1) = ""
  68.                 End If
  69.             ElseIf iDg(0) = 1 AndAlso iDg(1) >= 2 Then
  70.                 sResult(0) = "mốt "
  71.             ElseIf iDg(0) = 5 AndAlso iDg(1) >= 1 Then
  72.                 sResult(0) = "lăm "
  73.             End If
  74.  
  75.             Return sResult(2) + sResult(1) + sResult(0)
  76.         End Function
  77.         Public Shared Function Translate(ByVal Number As String) As String
  78.             Dim N2T As New NumBer2TextBase
  79.             Return N2T.Transtalte(Number)
  80.         End Function
  81.  
  82.     End Class
  83.    

sử dụng

Code: Select all

  1. MsgBox(NumBer2TextBase.Translate("10000000000000000000000"))

hoặc

Code: Select all

  1. Dim n2t As New NumBer2TextBase
  2.  MsgBox(n2t.Transtalte("123"))
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 2:14 pm

Thủ thuật:
Tác giả: gửi bởi ALTERMIGHTY vào ngày Thứ 4 18/07/2007 3:28 pm
Mô tả:


Code: Select all

  1. Imports System.Math
  2. Public Class DocChuoiSo
  3.  
  4.     Private Function DocCumBa(ByVal nd As String) As String
  5.         Dim so() As String = {"không ", "một ", "hai ", "ba ", "bốn ", "năm ", "sáu ", "bảy ", "tám ", "chín "}
  6.         Dim kq As String = ""
  7.         Select Case Len(nd)
  8.             Case 1 : Return so(CInt(nd))
  9.             Case 2
  10.                 Select Case nd(0)
  11.                     Case "1" : kq &= "mười "
  12.                     Case "0" : If nd.Chars(1) <> "0" Then kq &= "lẻ "
  13.                     Case Else : kq &= so(CInt(Left(nd, 1))) & "mươi "
  14.                 End Select
  15.                 Select Case nd(1)
  16.                     Case "5" : If nd(0) = "0" Then kq &= "năm " Else kq &= "lăm "
  17.                     Case "0"
  18.                     Case "1" : If nd(0) = "1" Then kq &= "một " Else kq &= "mốt "
  19.                     Case Else : kq &= so(CInt(nd(1).ToString))
  20.                 End Select
  21.             Case 3 : If nd <> "000" Then kq = so(CInt(Left(nd, 1))) & "trăm " & DocCumBa(Right(nd, 2))
  22.         End Select
  23.         Return kq
  24.     End Function
  25.  
  26.     Public Function DocSo(ByVal nd As String, Optional ByVal dauthapphan As Char = ".") As String
  27.         Dim kq As String = ""
  28.         If Left(nd, 1) = "-" Then
  29.             kq &= "âm "
  30.             nd = nd.Remove(0, 1)
  31.         End If
  32.         If nd.Length <= 3 Then Return kq & DocCumBa(nd)
  33.         Dim hang() As String = {"", "ngàn ", "triệu ", "tỷ ", "tỷ "}, k As Integer = 0
  34.         Dim phandoc() As String = Split(nd, CStr(dauthapphan))
  35.         Dim phanduong As String = ""
  36.         If UBound(phandoc) = 0 Then
  37.             For i As Integer = nd.Length - 3 To -2 Step -3
  38.                 Dim cumso As String = DocCumBa(nd.Substring(Max(i, 0), Min(3, 3 + i)))
  39.                 If cumso <> "" Or k = 3 Then phanduong = cumso & hang(k) & phanduong
  40.                 If k < 3 Then k += 1 Else k = 1
  41.             Next
  42.         Else : phanduong = DocSo(phandoc(0)) & "phẩy " & DocSo(phandoc(1))
  43.         End If
  44.         Return kq & phanduong
  45.     End Function
  46.  
  47. End Class
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 2:17 pm

Thủ thuật:
Tác giả: gửi bởi honamhai vào ngày Thứ 7 21/07/2007 8:18 am
Mô tả:


code này còn hạn chế

Code: Select all

  1.    Public Function VND(ByVal Baonhieu As Double) As String
  2.         Dim KetQua, SoTien As String
  3.         Dim nhom, chu As String
  4.         Dim dich, s1 As String
  5.         Dim s2, s3 As String
  6.         Dim i, j As Byte
  7.         Dim Vitri As Byte
  8.         Dim s As Double
  9.         Dim hang() As String = {"Không", "trăm", "mười", "gì đó"}
  10.         Dim doc() As String = {"Không", "tỷ", "triệu", "ngàn", "đồng", "xu"}
  11.         Dim dem() As String = {"Không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}
  12.         On Error Resume Next
  13.         If Baonhieu = 0 Then
  14.             KetQua = "Không đồng"
  15.         Else
  16.             If System.Math.Abs(Baonhieu) > 999999999999.99 Then
  17.                 KetQua = "Số quá lớn"
  18.             Else
  19.                 If Baonhieu < 0 Then
  20.                     KetQua = "Trừ" & Space(1)
  21.                 Else
  22.                     KetQua = Space(0)
  23.                 End If
  24.                 SoTien = Format(System.Math.Abs(Baonhieu), "###########0.00")
  25.                 SoTien = Microsoft.VisualBasic.Right(Space(12) & SoTien, 15)
  26.                 For i = 1 To 5
  27.                     nhom = Mid(SoTien, i * 3 - 2, 3)
  28.                     If nhom <> Space(3) Then
  29.                         Select Case nhom
  30.                             Case "000"
  31.                                 If i = 4 Then
  32.                                     chu = "đồng" & Space(1)
  33.                                 Else
  34.                                     chu = Space(0)
  35.                                 End If
  36.                             Case ".00", ",00"
  37.                                 chu = "chẵn"
  38.                             Case Else
  39.                                 s1 = Microsoft.VisualBasic.Left(nhom, 1)
  40.                                 s2 = Mid(nhom, 2, 1)
  41.                                 s3 = Microsoft.VisualBasic.Right(nhom, 1)
  42.                                 chu = Space(0)
  43.                                 hang(3) = doc(i)
  44.                                 For j = 1 To 3
  45.                                     dich = Space(0)
  46.                                     s = Val(Mid(nhom, j, 1))
  47.                                     If s > 0 Then
  48.                                         dich = dem(s) & Space(1) & hang(j) & Space(1)
  49.                                     End If
  50.                                     Select Case j
  51.                                         Case 2 And s = 1
  52.                                             dich = "mươi" & Space(1)
  53.                                         Case 3 And s = 0 And nhom <> Space(2) & "0"
  54.                                             dich = hang(j) & Space(1)
  55.                                         Case 3 And s = 5 And s2 <> Space(1) And s2 <> "0"
  56.                                             dich = "l" & Mid(dich, 2)
  57.                                         Case 2 And s = 0 And s3 <> "0"
  58.                                             If (s1 >= "1" And s1 <= "9") Or (s1 = "0" And i = 4) Then
  59.                                                 dich = "lẻ" & Space(1)
  60.                                             End If
  61.                                     End Select
  62.                                     chu = chu & dich
  63.                                 Next j
  64.                         End Select
  65.                         Vitri = InStr(1, chu, "mươi một", CompareMethod.Text)
  66.                         If Vitri > 0 Then Mid(chu, Vitri, 9) = "mươi mốt"
  67.                         KetQua = KetQua & chu
  68.                     End If
  69.                 Next i
  70.             End If
  71.         End If
  72.         VND = UCase(Microsoft.VisualBasic.Left(KetQua, 1)) & Mid(KetQua, 2)
  73.     End Function
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 2:18 pm

Thủ thuật:
Tác giả: gửi bởi cobecauvong vào ngày Thứ 3 28/08/2007 10:55 am
Mô tả:


cái này bên C#

Code: Select all

  1. using System;
  2. namespace Num2String
  3. {
  4.    /// <summary>
  5.    /// Summary description for Num2Str.
  6.    /// </summary>
  7.    public class Num2Str
  8.    {
  9.       public Num2Str()
  10.       {
  11.          //
  12.          // TODO: Add constructor logic here
  13.          //
  14.       }
  15.       // Hàm này có thực hiện cắt các số 0
  16.       // ví dụ 005 sẽ đọc là không trăm linh năm
  17.       private string Group32StrX(string num)
  18.       {  
  19.          string[] No = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"};
  20.          string kq, tram, chuc, donvi;
  21.          // Trăm
  22.          if(num.Substring(0, 1) == "0")
  23.          { tram = "";}
  24.          else
  25.          { tram = No[Convert.ToByte(num.Substring(0,1))] + " trăm "; }
  26.          // Chục
  27.          switch (num.Substring(1, 1))
  28.          {
  29.             case "0":if (num.Substring(2,1) != "0" && num.Substring(0,1) != "0")
  30.                    {
  31.                       chuc = "linh "; }
  32.                    else { chuc  = ""; } ; break;
  33.             case "1":chuc = "mười " ;break;
  34.             default:
  35.                chuc = No[Convert.ToByte(num.Substring(1,1))] + " mươi "; break;
  36.          }      
  37.          // Đơn vị
  38.          switch (num.Substring(2, 1))
  39.          {
  40.             case "0": donvi = "" ; break;
  41.             case "1": if ((num.Substring(1,1) == "0") || (num.Substring(1,1) == "1"))
  42.                     {
  43.                        donvi = "một";
  44.                     }
  45.                     else
  46.                     {
  47.                        donvi = "mốt";
  48.                     }; break;
  49.             case "5":
  50.                if (num.Substring(1,1) != "0")
  51.                {
  52.                   donvi = "lăm";
  53.                }
  54.                else
  55.                {
  56.                   donvi = "năm";
  57.                };break;
  58.             default:
  59.                donvi = No[Convert.ToByte(num.Substring(2,1))]; break;
  60.          }      
  61.          kq = tram + chuc + donvi;
  62.          return kq;
  63.       }
  64.  
  65.       private string IntNum2Str(string num)
  66.       {
  67.          string[] Cap = {"", " nghìn ", " triệu ", " tỷ ", " nghìn tỷ ", " triệu tỷ ", " tỷ tỷ ", " nghìn tỷ tỷ "};
  68.          string kq = "" , str = num, g3, kqtg;
  69.          int caps = 0;
  70.          while(str.Length > 3)
  71.          {
  72.             g3 = str.Substring(str.Length - 3,3);
  73.             str = str.Substring(0, str.Length - 3);
  74.             if (g3!="000")
  75.             { kqtg =  Group32StrX(g3)+ Cap[Convert.ToByte(caps)];}
  76.             else{ kqtg = "";}
  77.             kq = kqtg + kq;
  78.             caps++;
  79.          }
  80.          //Chuẩn bị trước khi sử dụng hàm Group32Str1
  81.          while (str.Length <3 )
  82.          { str = "0" + str; }
  83.          
  84.          if ((str == "000") && (num.Length <=3))
  85.          { kqtg = "không"; }
  86.          else
  87.          { kqtg = Group32StrX(str) + Cap[Convert.ToByte(caps)]; }
  88.          kq = kqtg + kq;
  89.          return kq;
  90.       }
  91.  
  92.       private string FracNum2Str(string num)
  93.       {
  94.          string[] No = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"};
  95.          string kq ="";
  96.          for (int i=0; i<num.Length; i++)
  97.          {
  98.             kq += No[Convert.ToByte(num.Substring(i,1))] + " ";
  99.          }
  100.          return kq;
  101.       }
  102.  
  103.       private string No2Str(string num)
  104.       {
  105.          string intstr, fracstr, am;
  106.          // Xử lý khi là số âm
  107.          if (num.Substring(0,1) == "-")
  108.          {
  109.             am ="âm ";
  110.             num = num.Replace("-", "");
  111.          }
  112.          else {am = "";}
  113.      
  114.          string[] str = num.Split('.');
  115.          // Số quá lớn nhiều hơn 27 chữ số
  116.          if (str[0].Length > 28)
  117.             throw new Exception("Số lớn quá không hiển thị được! ");
  118.  
  119.          string s;      
  120.          // Xử lý phần số, nếu là có số thập phân hoặc không
  121.          if (str.Length == 2)
  122.          {
  123.             intstr = IntNum2Str(str[0]);
  124.             if (str[1].Length <=2)
  125.             {
  126.                if (str[1].Substring(0,1) == "0")
  127.                {
  128.                   fracstr = FracNum2Str(str[1]);
  129.                }
  130.                else
  131.                {
  132.                   fracstr = IntNum2Str(str[1]);
  133.                }
  134.             }
  135.             else
  136.             {
  137.                fracstr = FracNum2Str(str[1]);
  138.             }
  139.             s = (intstr + " phảy " + fracstr);
  140.          }
  141.          else
  142.          {
  143.             intstr = IntNum2Str(str[0]);
  144.             s = intstr;
  145.          }
  146.          s = am + s;
  147.          string chuhoa = s.Substring(0,1).ToUpper();
  148.          s = s.Substring(1, s.Length-1);
  149.          return (chuhoa + s);
  150.       }
  151.  
  152.       public string NumNormalize(string num)
  153.       {
  154.          char ThousandSpace = ',';
  155.          char PointScape = '.';
  156.          string[] s = num.Split('.');
  157.          string g3, str = "";
  158.          while(s[0].Length > 3)
  159.          {
  160.             g3 = s[0].Substring(s[0].Length - 3,3);
  161.             s[0] = s[0].Substring(0, s[0].Length - 3);
  162.             str = ThousandSpace + g3 + str;
  163.          }
  164.          str = s[0] + str;
  165.          if (s.Length == 2)
  166.          {
  167.             str = (str + PointScape + s[1]);
  168.          }
  169.          return str.Replace("-,", "-");
  170.       }
  171.  
  172.       public string NumberToString(string no)
  173.       {
  174.          // xử lý trường hợp dáu phảy thay cho dấu chấm
  175.          if (no.IndexOf(",", 0, 1) != 0) {no = no.Replace(",", ".");}
  176.          // Xoá các ký tự trắng ở đầu và cuối
  177.          no = no.Trim();
  178.          // Xử lý khi nó là chữ chứ không phải là số
  179.          if (no == "0") return "không";
  180.          if (no == "") return "không";
  181.          double val;
  182.          try
  183.          {
  184.             val = Convert.ToDouble(no);
  185.          }
  186.          catch
  187.          {
  188.             throw new Exception("Đây không phải là số");
  189.          }
  190.          // tiêu diệt các số không
  191.          while (no.Substring(0, 1) == "0")
  192.          {
  193.             no = no.Substring(1, no.Length-1);
  194.          }
  195.  
  196.          if (no.IndexOf(".", 0, 1) != -1)
  197.          {
  198.             while (no.Substring(no.Length-1, 1) == "0")
  199.             {
  200.                no = no.Substring(0, no.Length-1);
  201.             }
  202.          }
  203.          no = No2Str(no);
  204.  
  205.          return no;
  206.       }
  207.    }
  208. }
  209.  
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Fri 08/05/2009 2:18 pm

Thủ thuật:
Tác giả: gửi bởi Kỳ Nam vào ngày Thứ 3 28/08/2007 11:19 am
Mô tả:


Code: Select all

  1.    Dim chữsố() As String = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}
  2.     Dim đơnvị() As String = {"đơn vị", "ngàn", "triệu", "tỉ"}
  3.  
  4.     Function đọc(ByVal số As String) As String
  5.         số = số.TrimStart("0")
  6.         'bỏ những số "0" ở đầu tiên
  7.  
  8.         If số.Length = 0 Then Return ""
  9.  
  10.         số = số.Replace(" ", "").Replace(",", "").Replace(".", "")
  11.         'nếu muốn cho phép có dấu " " hay "," hay "." trong số để dễ nhìn thì uncomment dòng đây
  12.  
  13.         Dim kq As String = ""
  14.         Dim chiềudài As Integer = số.Length
  15.  
  16.         'dùng biến để lưu lại từng nhóm ba chữ số dể dễ xài
  17.         Dim sốnhóm As Integer = Math.Ceiling(chiềudài / 3)
  18.         'tính số lượng nhóm 3 chữ số
  19.         Dim nhóm(sốnhóm - 1) As String
  20.  
  21.         'cóp nhóm đầu tiên , rồi lần lượt những nhóm còn lại , j là chiều dài nhóm đầu tiên
  22.         Dim j As Integer = chiềudài - (sốnhóm - 1) * 3
  23.         nhóm(0) = số.Substring(0, j)
  24.         For i As Integer = 1 To sốnhóm - 1
  25.             nhóm(i) = số.Substring(j + (i - 1) * 3, 3)
  26.         Next
  27.  
  28.         For i As Integer = 0 To nhóm.Length - 1
  29.             kq &= đọcnhóm3số(nhóm(i), tínhđơnvị(nhóm.Length - 1 - i)) & " "
  30.         Next
  31.  
  32.         Return kq.Trim.Replace("  ", " ")
  33.         'để chắc chắn không có 2 dấu cách đứng liền nhau và 0 có dấu cách ở 2 đầu
  34.     End Function
  35.  
  36.     Function tínhđơnvị(ByVal n As Integer) As String
  37.         'hàm đệ qui rất đơn giản
  38.         If n <= 3 Then
  39.             Return đơnvị(n)
  40.         Else
  41.             Return tínhđơnvị(n - 3) & " " & đơnvị(3)
  42.         End If
  43.     End Function
  44.  
  45.     Function đọcnhóm3số(ByVal số As String, ByVal đơnvị As String) As String
  46.         Dim kq As String = ""
  47.         Dim l As Integer = số.Length
  48.  
  49.         số = số.PadLeft(3, "0")
  50.  
  51.         If số = "000" Then Return ""
  52.         'không đọc những nhóm "000" như trong "1.000.000.000"
  53.  
  54.         If số.StartsWith("00") Then Return đọcsốhàngđơnvị(Val(số(2)), 0, l = 3) & " " & đơnvị
  55.         'chỗ này để tránh khó nghe khi đọc "1.000.000.001" , nó sẽ bỏ qua từ "không trăm" và chỉ đọc "một tỉ lẻ một đơn vị" , nếu không thích thì xóa dòng đây đi cũng được
  56.  
  57.         kq &= đọcsốhàngtrăm(Val(số(0)), l = 3)
  58.         kq &= đọcsốhàngchục(Val(số(1)))
  59.         kq &= đọcsốhàngđơnvị(Val(số(2)), Val(số(1)), l = 3)
  60.  
  61.         Return kq & " " & đơnvị
  62.     End Function
  63.  
  64.     Function đọcsốhàngtrăm(ByVal i As Integer, ByVal đọcsốkhông As Boolean) As String
  65.         'biến đọcsốkhông để tránh đọc chữ "không trăm" trong số < 100 như "75" , nếu không dùng biến này thì sẽ đọc là "không trăm bảy mươi lăm"
  66.  
  67.         If i = 0 Then
  68.             If đọcsốkhông Then
  69.                 Return "không trăm "
  70.             Else
  71.                 Return ""
  72.             End If
  73.         Else
  74.             Return chữsố(i) & " trăm "
  75.         End If
  76.     End Function
  77.  
  78.     Function đọcsốhàngchục(ByVal i As Integer) As String
  79.         Select Case i
  80.             Case 0
  81.                 Return ""
  82.             Case 1
  83.                 Return "mười "
  84.             Case Else
  85.                 Return chữsố(i) & " mươi "
  86.         End Select
  87.     End Function
  88.  
  89.     Function đọcsốhàngđơnvị(ByVal i As Integer, ByVal hàngchục As Integer, ByVal đọcchữlẻ As Boolean) As String
  90.         'biến đọcchữlẻ để tránh đọc chữ "lẻ" trong số < 10 như "2" , nếu không dùng biến này thì sẽ đọc là "lẻ hai"
  91.         'các lệnh điều khiển If...then và select...case chỉ là để đọc cho giống tiếng việt
  92.  
  93.         If i = 0 Then
  94.             Return ""
  95.         Else
  96.             If hàngchục = 0 Then
  97.                 If đọcchữlẻ Then
  98.                     Return "lẻ " & chữsố(i)
  99.                 Else
  100.                     Return chữsố(i)
  101.                 End If
  102.             Else
  103.                 Select Case i
  104.                     Case 1
  105.                         If hàngchục = 1 Then
  106.                             Return "một"
  107.                         Else
  108.                             Return "mốt"
  109.                         End If
  110.                     Case 5
  111.                         Return "lăm"
  112.                     Case Else
  113.                         Return chữsố(i)
  114.                 End Select
  115.             End If
  116.         End If
  117.  
  118.     End Function
  119.  
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

quang010692
Posts: 4
Joined: Thu 05/02/2009 8:44 pm

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby quang010692 » Wed 13/05/2009 10:28 am

hàm left và right ko có sẵn trong vb.net....
có cách nào trim nhanh hơn ko?

User avatar
clarkkent
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 1641
Joined: Wed 16/04/2008 11:25 am
Location: Chợ Lách - Bến Tre
Been thanked: 31 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby clarkkent » Wed 13/05/2009 11:18 am

quang010692 wrote:hàm left và right ko có sẵn trong vb.net....
có cách nào trim nhanh hơn ko?

vẫn xài được

Code: Select all

  1.        Microsoft.VisualBasic.Left()
  2.         Microsoft.VisualBasic.Right()


trim thì vầy thôi

Code: Select all

  1. Trim("chuỗi")
• Hôm bây: www.tinsoftware.com ^ ^
Cố gắng lên...

User avatar
tungcan5diop
Cựu chiến binh
Cựu chiến binh
Posts: 1123
Joined: Wed 24/09/2008 4:04 pm
Location: TPHCM
Has thanked: 1 time
Been thanked: 28 times

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby tungcan5diop » Mon 07/09/2009 10:47 am

cái Class của anh Phạm Tiên Sinh chạy chưa OK
xem hình
PTS-N.JPG
Debug cái Class cùa anh PTS

cái hàm của Kỳ Nam thì chạy OK rồi
xem hình
Attachments
KN-Y.JPG
Debug hàm của Kỳ Nam
Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

datproit
Posts: 3
Joined: Sat 21/11/2009 2:07 pm

đọc một số thành chữ!

Postby datproit » Sat 21/11/2009 2:25 pm

[tested=]sau này khi post bài bạn nhớ cho code vào thẻ,thẻ code nằm ở cái ComboBox "Programing Language",mình đã di chuyển bài viết của bạn sang đây cho gọn,sau này nên tìm kiếm xem có trùng chủ đề hay ko trước khi post bài bạn nhé. Người sửa tungcan5diop[/tested]
đây là modul giúp bạn có thể đọc một số thành lời (chuyển đổi số thành dạng text)
có lẽ bạn đã gặp nhiều trong quá trình học nhưng phạm vi đọc của chương trình này tương đối lớn nên thuật toán có khác bạn nhé. bạn nào thích Vb.net có sẵn mã nguồn đây.
các pác Pro đọc vào đừng chê nha , em mới học lớp 9 thôi!
Ai thích suy nghĩ thêm thì còn có mã viết bằng Pascal luôn, nhưng mình không up ở diễn dàn Vb. liên hệ với mình qua nick yahoo: :x datproit mình sẽ gửi Code cho '{ muốn làm quen ó}
modul đây, các pá dùng hàm Read để đọc số nhé dữ liệu vào là String
hoặc download ở địa chỉ cho nhanh:
http://www.mediafire.com/file/0lulzyyzyye/ReadNumber.vb


Code: Select all

  1. Module ReadNumber
  2.     Public donvi(0 To 10)
  3.     'hàm KiemTraSo( str) kiểm tra dữ liệu nhập vào có phải là các kí tự số hay không
  4.     Function KiemTraSo(ByVal str As String) As String
  5.         Dim i
  6.         kiemtraso = True
  7.         For i = 0 To Len(str)
  8.             ' 0 có mã ASCII là 48
  9.             ' 9 có mã ASCII là 58
  10.             If Not ((Asc(str(0)) > 47) And (Asc(str(0)) < 57)) Then
  11.                 KiemTraSo = False
  12.                 Exit Function
  13.             End If
  14.         Next
  15.     End Function
  16.     'Thủ tục Load() gán giá trị cho biến mảng Donvi (0 to 10) chứa các tên gọi số
  17.     Private Sub load()
  18.         donvi(0) = ""
  19.         donvi(1) = "một"
  20.         donvi(2) = "hai"
  21.         donvi(3) = "ba"
  22.         donvi(4) = "bốn"
  23.         donvi(5) = "năm"
  24.         donvi(6) = "sáu"
  25.         donvi(7) = "bảy"
  26.         donvi(8) = "tám"
  27.         donvi(9) = "chín"
  28.         donvi(10) = "mười"
  29.     End Sub
  30.     ' hàm Copy sẽ sao chép một chuổi con từ chuổi mẹ
  31.     Function copy(ByVal st As String, ByVal start As Integer, ByVal length As Integer) As String
  32.         Dim l = Microsoft.VisualBasic.Left(st, start + length)
  33.         Dim r = Microsoft.VisualBasic.Right(l, length)
  34.         copy = r
  35.     End Function
  36.  
  37.     'hàm dochangchuc() đọc các số hàng chục, tức có hai chữ số
  38.     ' viết hàm này có mục đích là tránh sự trùng lập khi đọc chữ số hàm trăm ở hàm readNumber()
  39.     Function docHangChuc(ByVal number As String) As String
  40.         Dim num = CInt(number)
  41.         Dim TextOut As String = ""
  42.         Dim donV, chuc, tram
  43.         donV = donvi(num Mod 10)        ' chữ số hàm đơn vị { lưu ý là chỉ lấy 1 số vào trả về tên gọi}
  44.         chuc = donvi((num Mod 100) \ 10) ' chữ số hàng trăm
  45.         tram = donvi((num Mod 1000) \ 100) 'chữ số hàng ngàn
  46.  
  47.         Select Case num
  48.             Case 10
  49.                 TextOut = "mười"
  50.             Case 11 To 19
  51.                 TextOut = "mười " & donV
  52.             Case 20 To 99
  53.                 If num Mod 10 = 1 Then ' các số có tận cùng là số 1, đọc là "mốt"
  54.                     TextOut = chuc & " mươi mốt"
  55.                 Else
  56.                     If num Mod 10 <> 5 Then
  57.                         TextOut = chuc & " mươi " & donV
  58.                     Else ' các số có tận cùng là số 5 , đọc là "lăm"
  59.                         TextOut = chuc & " mươi lăm"
  60.                     End If
  61.                 End If
  62.         End Select
  63.         docHangChuc = TextOut ' trả giá trị cho hàm
  64.     End Function
  65.     Function ReadNumber(ByVal number As String) As String
  66.         Dim TextOut As String = ""
  67.         If number <> "" Then
  68.  
  69.             Dim num = CInt(number)
  70.             Dim donV, chuc, tram
  71.  
  72.             donV = donvi(num Mod 10)
  73.             chuc = donvi((num Mod 100) \ 10)
  74.             tram = donvi((num Mod 1000) \ 100)
  75.  
  76.             Select Case num
  77.                 Case 0
  78.                     TextOut = "không"
  79.                 Case 1 To 9
  80.                     TextOut = donV
  81.                 Case 10 To 99
  82.                     TextOut = docHangChuc(num)
  83.                 Case 100 To 999
  84.                     If num Mod 100 = 0 Then TextOut = tram & " trăm"
  85.                     If ((num Mod 100) \ 10) = 0 Then
  86.                         TextOut = tram & " trăm lẻ " & donV
  87.                     Else
  88.                         TextOut = tram & " trăm " & docHangChuc(num Mod 100)
  89.                     End If
  90.             End Select
  91.         End If
  92.         ReadNumber = TextOut
  93.     End Function
  94.  
  95.     Function readInt(ByVal StrNum As String) As String
  96.         Dim temp = ""
  97.         If KiemTraSo(StrNum) Then
  98.             load()
  99.             Dim textO = StrNum
  100.             Dim i, vitri, sokitu, solop
  101.             Dim MangLop(0 To 6) ' lưu trữ 3 số trên một phần tử
  102.             Dim MangTenLop(0 To 6) ' lưu trữ tên các lớp của số
  103.             MangTenLop(0) = "" 'lớp 0 không tồn tại
  104.             MangTenLop(1) = "" 'lớp thứ 1 có 3 chữ số tức là hàng trăm, nhưng ta đã sử lí số hàng trăm ở hàm readNumber rồi nên bỏ trống chổ này
  105.             MangTenLop(2) = " nghìn "
  106.             MangTenLop(3) = " triệu "
  107.             MangTenLop(4) = " tỉ "
  108.             MangTenLop(5) = " nghìn tỉ "
  109.             MangTenLop(6) = " triệu tỉ "
  110.             ' bạn có thể mở rộng thêm phạm vi đọc
  111.             ' bằng cách thêm phần tử cho biến mảng MangTenLop  
  112.  
  113.             sokitu = Len(textO)
  114.             If sokitu Mod 3 = 0 Then
  115.                 solop = sokitu \ 3
  116.             Else
  117.                 solop = sokitu \ 3 + 1
  118.             End If
  119.             readInt = ""
  120.             If solop > 6 Then Exit Function
  121.  
  122.             vitri = (sokitu Mod 3)
  123.             If (vitri = 0) And (solop >= 2) Then vitri = 3
  124.  
  125.             If solop = 1 Then
  126.                 MangLop(1) = textO
  127.             End If
  128.  
  129.             If solop >= 2 Then
  130.                 If sokitu Mod 3 <> 0 Then
  131.                     MangLop(1) = copy(textO, 0, sokitu Mod 3)
  132.                 Else
  133.                     MangLop(1) = copy(textO, 0, 3) ' trường hợp số kí tự chia hết cho 3 thì không dùng công thức "sokitu Mod 3" để sát định số kí tụ ở lớp lớn nhất
  134.                 End If
  135.  
  136.                 For i = 2 To solop
  137.                     MangLop(i) = copy(textO, vitri, 3) ' sao chép các kí tự theo lớp vào mảng "MangLop()"
  138.                     vitri += 3 'mổi lớp có 3 kí số nên phải tăng lên 3 ở vị trí copy tiếp theo
  139.                 Next
  140.             Else
  141.                 MangLop(2) = copy(textO, 1, 3) ' trường hợp có 2 lớp
  142.             End If
  143.  
  144.             For i = 1 To solop ' đọc các số sau khi đã có 2 mảng cần thiết
  145.                 temp = temp & ReadNumber(MangLop(i)) & MangTenLop(solop - i + 1)
  146.             Next
  147.             readInt = temp
  148.         Else ' trường hợp dữ liệu nhập vào sai
  149.             readInt = "Sai giá trị"
  150.         End If
  151.     End Function
  152.  
  153.     Function Read(ByVal num As String) As String
  154.         Dim number = ""
  155.         Dim reT = ""
  156.         Dim i
  157.         For i = 1 To Len(num)
  158.             number = number & num(i)
  159.         Next
  160.  
  161.        If num(1) = "-" Then
  162.             reT = "Âm " & readInt(number)
  163.         Else
  164.             reT = readInt(num)
  165.         End If
  166.         Read = reT
  167.     End Function
  168.  
  169. End Module

datproit
Posts: 3
Joined: Sat 21/11/2009 2:07 pm

Re: [VB.NET] Code chuyển số thành chữ! mong các sư hunh chỉ giáo

Postby datproit » Thu 31/12/2009 8:18 pm

Tên chương trình:
Ngôn ngữ lập trình: Visual Basic 2005
Tác giả: Hồ Minh Đạt - 9/5 - THCS Nguyễn Hiền">Hồ Minh Đạt - 9/5 - THCS Nguyễn Hiền
Chức năng:

module này có thể chuyển 1 số thành cách đọc trong tiếng việt và cả tiếng anh nữa
  1.   Module ReadNumber
  2.     ' hàm này có phạm vi đọc là 21 chữ số, [vb][vbnet]
[/vb]tương ứng với 7 lớp
Private donvi(0 To 1, 0 To 10)

'Thủ tục Load() gán giá trị cho biến mảng Donvi (0 to 10) chứa các tên gọi số
Private Sub load()
donvi(1, 0) = ""
donvi(1, 1) = "một"
donvi(1, 2) = "hai"
donvi(1, 3) = "ba"
donvi(1, 4) = "bốn"
donvi(1, 5) = "năm"
donvi(1, 6) = "sáu"
donvi(1, 7) = "bảy"
donvi(1, 8) = "tám"
donvi(1, 9) = "chín"
donvi(1, 10) = "mười"

donvi(0, 0) = ""
donvi(0, 1) = "one"
donvi(0, 2) = "two"
donvi(0, 3) = "three"
donvi(0, 4) = "four"
donvi(0, 5) = "five"
donvi(0, 6) = "six"
donvi(0, 7) = "seven"
donvi(0, 8) = "eight"
donvi(0, 9) = "nine"
donvi(0, 10) = "ten"
End Sub
' hàm Copy sẽ sao chép một chuổi con từ chuổi mẹ
Function copy(ByVal st As String, ByVal start As Integer, ByVal length As Integer) As String
Dim ll
ll = Microsoft.VisualBasic.Left(st, start + length)
Dim r
r = Microsoft.VisualBasic.Right(ll, length)
copy = r
End Function

' hàm nay loạt bỏ các kí tự không phải là chữ số
Function lamDepSo(ByVal strnumber As String) As String
Dim i
Dim outString As String = ""
' 0..9 có mã ASCII là 48..58

For i = 0 To Len(strnumber) - 1
If (Asc(strnumber(i)) > 47) And (Asc(strnumber(i)) < 59) Then
outString = outString + strnumber(i)
End If
Next

lamDepSo = outString
End Function

'---------------------------------------------------------------------------------------
'đọc số hàng chục của tiếng Anh
Function docHangChucEnglish(ByVal number As String) As String
Dim num = CInt(number)
Dim TextOut As String = ""
Dim donV, chuc
donV = donvi(0, num Mod 10) ' chữ số hàm đơn vị { lưu ý là chỉ lấy 1 số vào trả về tên gọi}
chuc = donvi(0, (num Mod 100) \ 10) ' chữ số hàng trăm

Select Case num
Case 10
TextOut = "ten"
Case 11
TextOut = "eleven "
Case 12
TextOut = "twelve"
Case 13
TextOut = "thirteen"
Case 14 To 19
If num = 15 Then
TextOut = "fifteen"
Else
TextOut = donV & "teen"
End If
Case 20 To 29
TextOut = " twenty " & donV
Case 30 To 59
If num = 30 Then
TextOut = " thirty "
Else
If num = 50 Then TextOut = " fifty "

Select Case num
Case 31 To 39
TextOut = " thirty " & donV
Case 40 To 49
TextOut = " fourty " & donV
Case 50 To 59
TextOut = " fifty " & donV
End Select
End If
Case 60 To 99
If num > 79 And num < 90 Then ' trường hợp so 80 viết có 2 chữ "t"
TextOut = " eighty " & donV
Else
TextOut = chuc & "ty " & donV
End If
End Select
docHangChucEnglish = TextOut ' trả giá trị cho hàm
End Function
'đọc số hàng chục của tiếng việt
Function docHangChuc(ByVal number As String) As String
Dim num = CInt(number)
Dim TextOut As String = ""
Dim donV, chuc
donV = donvi(1, num Mod 10) ' chữ số hàm đơn vị { lưu ý là chỉ lấy 1 số vào trả về tên gọi}
chuc = donvi(1, (num Mod 100) \ 10) ' chữ số hàng trăm


Select Case num
Case 10
TextOut = "mười"
Case 11 To 19
TextOut = "mười " & donV
Case 20 To 99
If num Mod 10 = 1 Then ' các số có tận cùng là số 1, đọc là "mốt"
TextOut = chuc & " mươi mốt"
Else
If num Mod 10 <> 5 Then
TextOut = chuc & " mươi " & donV
Else ' các số có tận cùng là số 5 , đọc là "lăm"
TextOut = chuc & " mươi lăm"
End If
End If
End Select
docHangChuc = TextOut ' trả giá trị cho hàm
End Function
'doc so từ 1..99
Function ReadNumber(ByVal lan As Integer, ByVal number As String) As String
Dim TextOut As String = ""
Dim num = number
Dim donV, chuc, tram
donV = donvi(lan, num Mod 10)
chuc = donvi(lan, (num Mod 100) \ 10)
tram = donvi(lan, (num Mod 1000) \ 100)
'đọc tiếng Việt
If lan = 0 Then
Select Case num
Case 0
TextOut = "Zero"
Case 1 To 9
TextOut = donV
Case 10 To 99
TextOut = docHangChucEnglish(num)
Case 100 To 999
If num Mod 100 = 0 Then TextOut = tram & " hundred and "
If ((num Mod 100) \ 10) = 0 Then
TextOut = tram & " hundred and " & donV
Else
TextOut = tram & " hundred and " & docHangChucEnglish(num Mod 100)
End If
End Select
End If
'đọc tiếng Anh
If lan = 1 Then
Select Case num
Case 0
TextOut = "không"
Case 1 To 9
TextOut = donV
Case 10 To 99
TextOut = docHangChuc(num)
Case 100 To 999
If num Mod 100 = 0 Then TextOut = tram & " trăm"
If ((num Mod 100) \ 10) = 0 Then
TextOut = tram & " trăm lẻ " & donV
Else
TextOut = tram & " trăm " & docHangChuc(num Mod 100)
End If
End Select
End If
ReadNumber = TextOut
End Function

'dùng hàm nay để chuyển đổi số thành lời. tham số 'Lan' là trị số qui định ngôn ngữ Anh hay việt
' quy ước: 1 là tiếng Việt
' 0 là tiếng Anh
Function ConvertNumToString(ByVal Lan As Integer, ByVal strnumberInput As String) As String
Dim TextInput = lamDepSo(strnumberInput) ' xu li so nhap vao
ConvertNumToString = ""

If TextInput = "" Or Len(TextInput) > 21 Then
ConvertNumToString = "Too large number or not enter number"
Exit Function
End If

Dim temp = ""

If strnumberInput(0) = "-" Then
If Lan = 1 Then
temp = "Âm "
Else
temp = "Ninus "
End If
End If

load() ' gan gia trị cho các biến mảng


Dim i, vitri, sokitu, solop
Dim MangLop(0 To 7) ' lưu trữ 3 số trên một phần tử
Dim MangTenLop(0 To 1, 0 To 7) ' lưu trữ tên các lớp của số

MangTenLop(0, 0) = "" 'lớp 0 không tồn tại
MangTenLop(0, 1) = "" 'lớp thứ 1 có 3 chữ số tức là hàng trăm, nhưng ta đã sử lí số hàng trăm ở hàm readNumber rồi nên bỏ trống chổ này
MangTenLop(0, 2) = " thousand "
MangTenLop(0, 3) = " million "
MangTenLop(0, 4) = " bilion "
MangTenLop(0, 5) = " thousand bilion "
MangTenLop(0, 6) = " million bilion "
MangTenLop(0, 7) = " billion bilion "

MangTenLop(1, 0) = "" 'lớp 0 không tồn tại
MangTenLop(1, 1) = "" 'lớp thứ 1 có 3 chữ số tức là hàng trăm, nhưng ta đã sử lí số hàng trăm ở hàm readNumber rồi nên bỏ trống chổ này
MangTenLop(1, 2) = " nghìn "
MangTenLop(1, 3) = " triệu "
MangTenLop(1, 4) = " tỉ "
MangTenLop(1, 5) = " nghìn tỉ "
MangTenLop(1, 6) = " triệu tỉ "
MangTenLop(1, 7) = " tỉ tỉ "
' bạn có thể mở rộng thêm phạm vi đọc
' bằng cách thêm phần tử cho biến mảng MangTenLop

sokitu = Len(TextInput)
solop = sokitu \ 3
If sokitu Mod 3 > 0 Then solop += 1


If solop > 7 Then Exit Function

vitri = (sokitu Mod 3)
If (vitri = 0) And (solop >= 2) Then vitri = 3
[vb][/vb]
If solop = 1 Then
MangLop(1) = TextInput
End If

If solop >= 2 Then
If sokitu Mod 3 <> 0 Then
MangLop(1) = copy(TextInput, 0, sokitu Mod 3)
Else
MangLop(1) = copy(TextInput, 0, 3) ' trường hợp số kí tự chia hết cho 3 thì không dùng công thức "sokitu Mod 3" để sát định số kí tụ ở lớp lớn nhất
End If

For i = 2 To solop
MangLop(i) = copy(TextInput, vitri, 3) ' sao chép các kí tự theo lớp vào mảng "MangLop()"
vitri += 3 'mổi lớp có 3 kí số nên phải tăng lên 3 ở vị trí copy tiếp theo
Next
Else
MangLop(2) = copy(TextInput, 1, 3) ' trường hợp có 2 lớp
End If

For i = 1 To solop ' đọc các số sau khi đã có 2 mảng cần thiết
temp = temp & ReadNumber(Lan, MangLop(i)) & MangTenLop(Lan, solop - i + 1)
Next
ConvertNumToString = temp
End Function

End Module
[/vbnet]
cách sử dụng
gọi hàm với tham số Lan=1 là tiếng việt lan=2 là tiếng anh
hàm này của em có thể đọc được số có tối đa 21 chữ số
[vbnet]lbVietNam.Text = ConvertNumToString(1, "123456789123456789123") 'tieng viet
LbEnglish.Text = ConvertNumToString(0, "123456789123456789123") 'chuyen sang tieng anh
[/vbnet]

itconga
Posts: 2
Joined: Sun 06/11/2011 12:13 am

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby itconga » Sun 06/11/2011 12:21 am

clarkkent có thể cho mình hỏi tý được không ?
mình không hiểu code chổ này?
If l < k Then
tg = mid(chuoi1, i - (l + 1) * 3 + 1, 3)
Else
tg = Microsoft.VisualBasic.Left(chuoi1, i - l * 3)
End If
Có phải đây là đệ quy trong VB không?
cảm ơn .

User avatar
PhapSuXeko
Mạnh Thường Quân
Mạnh Thường Quân
Posts: 295
Joined: Sun 03/05/2009 7:44 pm
Location: Tây Ninh
Has thanked: 1 time
Been thanked: 10 times
Contact:

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby PhapSuXeko » Sun 06/11/2011 11:28 pm

  1. If l < k Then
  2. tg = mid(chuoi1, i - (l + 1) * 3 + 1, 3)
  3. Else
  4. tg = Microsoft.VisualBasic.Left(chuoi1, i - l * 3)
  5. End If
  6.  


Mid(s, 1, 3) -> Hàm lấy chuỗi con từ chuỗi s, lấy 3 ký tự bắt đầu từ ký tự thứ 1
Microsoft.VisualBasic.Left(s, 3) -> Lấy chuỗi con từ chuỗi s, lấy 3 ký tự bên trái
Trang chủ phần mềm xem ảnh ImageGlass: http://www.imageglass.org

nguyentrinhthu
Thành viên tích cực
Thành viên tích cực
Posts: 105
Joined: Wed 23/04/2008 8:43 am
Has thanked: 6 times
Been thanked: 1 time

Re: [VB.NET] Code chuyển số thành chữ!!!

Postby nguyentrinhthu » Thu 17/10/2013 10:56 am

clarkkent wrote:Thủ thuật:
Tác giả: gửi bởi hoangthu1974 » T.Tư 12/11/2008 9:09 am
Mô tả:


Code: Select all

    '------------------------------------------------------------------    ' Function Name: Num2Text    ' Description  : Change the numeric to text speech    ' Author       : Hoang Thu    ' Date Create  : 23/12/2007    '------------------------------------------------------------------    Function Num2Text(ByVal s As String, Optional ByVal Local As Boolean = False) As String        'Optional ByVal Local As Boolean = False 'Nam Kỳ Reading        'Optional ByVal Local As Boolean = True 'Bắc Kỳ Reading        Dim DS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator        Dim GS As Char = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator        Dim fDS As Boolean = False        Dim fDecAdd As Boolean = False        Dim so() As String = {"không", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín"}        Dim hang() As String = {"", "ngàn", "triệu", "tỷ"}        If Local Then            hang(1) = "nghìn"        End If        Dim i, j, cntDS, donvi, chuc, tram As Integer        Dim str As String        str = ""        s = s.Replace(GS, "")        If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)         i = s.Length        While s.Substring(0, 1) = "0"            s = s.Substring(1, s.Length - 1)        End While        If s.Substring(0, 1) = DS Then s = "0" & s        cntDS = 0        If InStr(s, DS) Then            For i = 0 To s.Length - 1 Step 1                If s.Substring(i, 1) = DS Then                    cntDS += 1                End If            Next        End If        If cntDS > 1 Then Return ""        If cntDS > 0 Then            While s.Substring(s.Length - 1, 1) = "0"                s = s.Substring(0, s.Length - 1)            End While        End If        If s.Substring(s.Length - 1, 1) = DS Then s = s.Substring(0, s.Length - 1)         i = s.Length - 1        If i = 0 Then            str = ""        Else            j = 0            Do While i >= 0                If s.Substring(i, 1) = DS Then                    fDS = True                    i -= 1                    GoTo DecimalAdd                Else                    donvi = Int(s.Substring(i, 1))                    i -= 1                End If                 If i > -1 Then                    If s.Substring(i, 1) = DS Then                        i -= 1                        chuc = -1                        tram = -1                        fDS = True                        GoTo NumberRead                    Else                        chuc = Int(s.Substring(i, 1))                    End If                Else                    chuc = -1                End If                i -= 1                 If i > -1 Then                    If s.Substring(i, 1) = DS Then                        i -= 1                        tram = -1                        fDS = True                        GoTo NumberRead                    Else                        tram = Int(s.Substring(i, 1))                    End If                Else                    tram = -1                End If                i -= 1NumberRead:                If donvi > 0 Or chuc > 0 Or tram > 0 Or j = 3 Then str = hang(j) & " " & str                j += 1                 If j > 3 Then j = 1                 If donvi = 1 And chuc > 1 Then                    str = "mốt" & " " & str                ElseIf donvi = 4 And chuc > 1 Then                    If Local Then                        str = "tư" & " " & str                    Else                        str = so(donvi) & " " & str                    End If                ElseIf donvi = 5 Then                    If chuc > 0 Then                        str = "lăm" & " " & str                    Else                        str = so(donvi) & " " & str                    End If                Else                    If donvi <> 0 Then str = so(donvi) & " " & str                End If                 If chuc < 0 Then                    If Not fDS Then Exit Do                Else                    If chuc = 0 And donvi > 0 Then                        str = "lẻ" & " " & str                    ElseIf chuc = 1 Then                        str = "mười" & " " & str                    ElseIf chuc > 1 Then                        str = so(chuc) & " " & "mươi" & " " & str                    End If                End If                If tram < 0 Then                    If Not fDS Then Exit Do                Else                    If tram > 0 Or chuc > 0 Or donvi > 0 Then                        str = so(tram) & " " & "trăm" & " " & str                    End If                End IfDecimalAdd:                If fDS Then                    str = "phảy " & str                    j = 0                    fDS = False                    fDecAdd = True                End If            Loop        End If         If str.Length > 0 Then            str = str.Trim            str = str.Replace("  ", " ")            str = UCase(str.Substring(0, 1)) & str.Substring(1, str.Length - 1)            Return str        Else            Return ""        End If    End Function



kinh đọc được cả triệu tỷ luôn


Return to “[.NET] Chuỗi và Thời gian”

Who is online

Users browsing this forum: No registered users and 1 guest