Chuyển đổi số thành chữ tiếng anh bằng VB.NET
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ý. Trước tiên các bạn khai bào các biến ...
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ý.
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!