NEWS

Chuyển đổi số thành chữ tiếng anh bằng VB.NET

Chuyển đổi số thành chữ tiếng anh bằng VB.NET
Đăng bởi: Hoàng Tử Nhỏ - Lượt xem: 15085 20:32:56, 15/10/2015VB.NET   In bài viết

Bài viết này mình sẽ giới thiệu đến các bạn hàm đọc số thành chữ tiếng Anh, tính năng này rất hữu ích đối với những bạn viết các đơn hàng đọc số bằng tiếng Anh gửi sang nước ngoài trong một số các ứng dụng quản lý.

Chuyển đổi số thành chữ tiếng Anh trong VB.NET

Trước tiên các bạn khai bào các biến sau:

Dim MangChuSo(10) As String
Dim tu_bon As String
Dim StrSo As String
Dim So_Nhom
Dim Stt_Nhom
Dim Stt_So
Dim So_Phu
Dim soCongthem As Double = 0.0000000000001

Sau khi khai báo các biến trên các bạn viết hàm đổi số thành chữ như sau:

 Function DOI_SO_CHU_NHOM_ENG(ByVal Nhom_So, ByVal Stt_Nhom, ByVal So_Nhom) As String

        Dim Tram, Chuc, Don_Vi, Tram_Chu, Chuc_Chu, Don_Vi_Chu, Nhom_Chu As String

        Nhom_Chu = ""
        Tram = Microsoft.VisualBasic.Left(Nhom_So, 1)
        Chuc = Nhom_So.Substring(1, 1)
        Don_Vi = Microsoft.VisualBasic.Right(Nhom_So, 1)
        Tram_Chu = MangChuSo(Val(Tram))
        Chuc_Chu = MangChuSo(Val(Chuc))
        Don_Vi_Chu = MangChuSo(Val(Don_Vi))


        If (Tram <> "0") Then
            Nhom_Chu = Nhom_Chu + Tram_Chu + " hundred"
        End If

        Select Case Trim(Chuc_Chu)

            Case "and"
                If Trim(Don_Vi_Chu) <> " zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If

            Case "zezo"

                If Trim(Don_Vi_Chu) <> " zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If

            Case "one"

                Select Case Trim(Don_Vi_Chu)

                    Case "one"
                        Nhom_Chu = Nhom_Chu + " eleven"
                    Case "two"
                        Nhom_Chu = Nhom_Chu + " twelve"
                    Case "three"
                        Nhom_Chu = Nhom_Chu + " thirteen"
                    Case "four"
                        Nhom_Chu = Nhom_Chu + " fourteen"
                    Case "five"
                        Nhom_Chu = Nhom_Chu + " fifteen"
                    Case "zezo"
                        Nhom_Chu = Nhom_Chu + " ten"
                    Case Else
                        Nhom_Chu = Nhom_Chu + " " + Trim(Don_Vi_Chu) + "teen"

                End Select


            Case "two"
                Nhom_Chu = Nhom_Chu + " twenty"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If
            Case "three"
                Nhom_Chu = Nhom_Chu + " thirty"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If
            Case "four"
                Nhom_Chu = Nhom_Chu + " forty"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If
            Case "five"
                Nhom_Chu = Nhom_Chu + " fifty"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If

            Case "six"
                Nhom_Chu = Nhom_Chu + " sixty"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If
            Case "seven"
                Nhom_Chu = Nhom_Chu + " seventy"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If
            Case "eight"
                Nhom_Chu = Nhom_Chu + " eighty"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If
            Case "nine"
                Nhom_Chu = Nhom_Chu + " ninety"
                If Trim(Don_Vi_Chu) <> "zezo" Then
                    Nhom_Chu = Nhom_Chu + Don_Vi_Chu
                End If
        End Select


        If (Tram = "0") And (Chuc = 0) And (Don_Vi <> 0) And (Stt_Nhom > 1) Then
            Nhom_Chu = Don_Vi_Chu
        End If
        If (Tram = 0) And (Chuc = 0) And (Don_Vi <> 0) And (So_Nhom = 1) Then
            Nhom_Chu = Don_Vi_Chu
        End If

        Select Case Stt_Nhom
            Case 2
                Nhom_Chu = Nhom_Chu + " thousand"
            Case 3
                Nhom_Chu = Nhom_Chu + " milion"
            Case 4
                Nhom_Chu = Nhom_Chu + " bilion"
            Case 5
                Nhom_Chu = Nhom_Chu + " thousand"
            Case 6
                Nhom_Chu = Nhom_Chu + " milion"
        End Select

        If (Tram = 0) And (Chuc = 0) And (Don_Vi = 0) Then
            Nhom_Chu = ""
        End If
        Return Nhom_Chu
End Function
 Private Function DOI_SO_CHU_ENG(ByVal ps_nSo As Double, ByVal ps_sDVT As String, Optional ByVal ps_bSoBon As Boolean = False) As String
        Dim So As Double = ps_nSo
        Dim Sosaudauphay As String
        So = ps_nSo
        tu_bon = " four"
        If ps_bSoBon Then
            tu_bon = "four"
        End If

        MangChuSo(0) = " zezo"
        MangChuSo(1) = " one"
        MangChuSo(2) = " two"
        MangChuSo(3) = " three"
        MangChuSo(4) = " four"
        MangChuSo(5) = " five"
        MangChuSo(6) = " six"
        MangChuSo(7) = " seven"
        MangChuSo(8) = " eight"
        MangChuSo(9) = " nine"

        Dim SoChu As String = ""
        If So < 0 Then
            So = -So
            SoChu = SoChu + " minus"
        End If

        Sosaudauphay = So - Int(So)
        Sosaudauphay += 0.0000000000001
        So = Int(So)

        If So = 0 Then
            SoChu = SoChu + " zezo 0"
        Else
            StrSo = Trim(Str(So))
            If Len(StrSo) Mod 3 = 1 Then
                StrSo = "00" + StrSo
            End If

            If Len(StrSo) Mod 3 = 2 Then
                StrSo = "0" + StrSo
            End If

            So_Nhom = Len(StrSo) / 3
            Stt_Nhom = So_Nhom
            Stt_So = 0

            Do While Stt_So <= (Len(StrSo) - 2) '&&Cho den vi tri cua chu so dau tien cua nhom cuoi cung
                So_Phu = StrSo.Substring(Stt_So, 3)
                Stt_Nhom = Math.Round((Len(StrSo) - Stt_So + 1) / 3, 0)

                If Len(DOI_SO_CHU_NHOM_ENG(So_Phu, Stt_Nhom, So_Nhom)) > 0 Then

                    SoChu = SoChu + DOI_SO_CHU_NHOM_ENG(So_Phu, Stt_Nhom, So_Nhom) + " and"
                Else
                    SoChu = SoChu + DOI_SO_CHU_NHOM_ENG(So_Phu, Stt_Nhom, So_Nhom)
                End If

                Stt_So = Stt_So + 3
            Loop

        End If

        SoChu = Microsoft.VisualBasic.Left(Trim(SoChu), Len(Trim(SoChu))) 'Bangvs - Da sua -> 2013.03.05


        If Sosaudauphay > 0 + soCongthem Then
            SoChu = SoChu + " dot"
            Sosaudauphay = Sosaudauphay.ToString.Substring(2, ps_nSo.ToString.Length - So.ToString.Length - 1) 'Cat lay phan sau dau phay)
            If Microsoft.VisualBasic.Left(Sosaudauphay, 1) <> "0" Then
                '&&Cat nhung so 0 o ben phai do STR() di
                Do While Microsoft.VisualBasic.Right(Sosaudauphay, 1) = "0"
                    Sosaudauphay = Microsoft.VisualBasic.Left(Sosaudauphay, Len(Sosaudauphay) - 1)
                Loop
                '&&Cong them cac so khong vao dang truoc chuoi de duoc chan cac to hop 3 so
                If Len(Sosaudauphay) Mod 3 = 1 Then
                    Sosaudauphay = "00" + Sosaudauphay
                End If

                If Len(Sosaudauphay) Mod 3 = 2 Then
                    Sosaudauphay = "0" + Sosaudauphay
                End If

                So_Nhom = Math.Round(Len(Sosaudauphay) / 3, 0)
                Stt_Nhom = So_Nhom
                Stt_So = 0

                Do While Stt_So <= (Len(Sosaudauphay) - 2) '&&Cho den vi tri cua chu so dau tien cua nhom cuoi cung  
                    So_Phu = Sosaudauphay.Substring(Stt_So, 3)
                    Stt_Nhom = Math.Round((Len(Sosaudauphay) - Stt_So + 1) / 3, 0)
                    SoChu = SoChu + DOI_SO_CHU_NHOM_ENG(So_Phu, Stt_Nhom, So_Nhom)
                    Stt_So = Stt_So + 3
                Loop
            Else
                Do While Microsoft.VisualBasic.Right(Sosaudauphay, 1) = "0"
                    Sosaudauphay = Microsoft.VisualBasic.Left(Sosaudauphay, Len(Sosaudauphay) - 1)
                Loop
                Dim i As Integer = 0
                Dim j As Integer = 0
                For i = 0 To Len(Sosaudauphay) - 1
                    j = Sosaudauphay.Substring(i, 1)
                    SoChu = SoChu + MangChuSo(Val(j))
                Next
            End If

        End If
        SoChu = Trim((Microsoft.VisualBasic.Left(SoChu, 1)).ToUpper + SoChu.Substring(1) + ps_sDVT) 'Bangvs - Da sua -> 2013.03.05
        Return SoChu
End Function

Sau khi có hàm đọc số trên, có thể một số bạn đọc sẽ không hiểu, nhưng thôi kệ cứ thừa nhận vậy. Đến đây xem như mọi thứ đã xong. Bây giờ sử dụng nó như thế nào? Bạn thiết kế nút trên form như trên hình, giờ ta viết code cho nút như sau:

Private Sub btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn.Click
        Try
            Dim Socandoc As Double
            If IsNumeric(txtso.Text) Then
                Socandoc = CDbl(txtso.Text)
                TextBox1.Text = DOI_SO_CHU_ENG(Socandoc, " USD", True)
            Else
                MsgBox(txtso.Text)
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
End Sub

Chúc các bạn thành công!

Tags: convert

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

Chuyển đổi số thành chữ tiếng anh bằng VB.NET
Đăng bởi: Hoàng Tử Nhỏ - Lượt xem: 15085 20:32:56, 15/10/2015VB.NET   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp