Trang 1 trên 1

[VB.NET] Chuyển đổi tiền

Đã gửi: T.Sáu 16/11/2012 10:19 am
gửi bởi Romeo8x
Thủ thuật: [VB.NET] Chuyển đổi tiền
Tác giả: Romeo8x Sưu tầm
Mô tả: Sau mấy ngày chật vật với đề tài quản lý bán hàng, đã cho ra thành phẩm đoạn code đổi tiền nhập từ số ra chữ. Các bạn xem thử và cho ý kiến.

Lưu ý: Số đưa vào được tính là hàng nghìn. Ví dụ: 123000 thì chỉ cần đưa vào là 123 (xử lí cắt 3 kí tự cuối trước)

Đặc điểm:
- Chuyển đổi từ 1 số bất kỳ đưa vào thành dạng đọc bằng chữ.
- Có thể đọc tới con số nghìn tỉ
- Xử lý tất cả các trường hợp lẻ 4 và lẻ 5(linh tư, mười bốn, linh năm, mười lăm....)
- Xử lý trường hợp hàng trăm là không: Ví dụ 1024 -> một triệu không trăm hai mươi tư
- Xử lý trường hợp nếu số tiền là chẵn thì không đọc những số không. Ví dụ 10000 -> mười triệu (không đọc hơn)
- Code đơn giản ngắn gọn, dễ hiểu. Sử dụng 1 vòng lặp đệ quy :D
Và đây là code:

  1. Module ChuyenDoiTien
  2.     Dim ChuSo() As String = {"", "một ", "hai ", "ba ", "bốn ", "năm ", "sáu ", "bảy ", "tám ", "chín "}
  3.     Dim SoTien() As String = {"nghìn ", "triệu ", "tỉ ", "nghìn "}
  4.  
  5.     Function Doc3So(ByVal so As Integer, Optional ByVal n As Boolean = False) As String
  6.         Doc3So = ""
  7.         Dim Tram, Chuc, Dvi As Byte
  8.         Tram = so \ 100
  9.         Dvi = so Mod 10
  10.         Chuc = ((so - Dvi) \ 10) Mod 10
  11.  
  12.         'Xử lý hàng trăm
  13.         If Tram = 0 Then
  14.             If n Then
  15.                 Doc3So = "không trăm "
  16.                 If Chuc = 0 AndAlso Dvi > 0 Then Doc3So = Doc3So & "linh "
  17.             End If
  18.         Else
  19.             Doc3So = ChuSo(Tram) & "trăm "
  20.         End If
  21.  
  22.         'Xử lý hàng chục
  23.         Select Case Chuc
  24.             Case 0
  25.                 If Tram > 0 AndAlso Dvi <> 0 Then
  26.                     Doc3So = Doc3So & "linh "
  27.                 End If
  28.             Case 1 : Doc3So = Doc3So & "mười "
  29.             Case Else : Doc3So = Doc3So & ChuSo(Chuc) & "mươi "
  30.         End Select
  31.  
  32.         'Xử lý hàng đơn vị
  33.         Select Case Dvi
  34.             Case 1 : Doc3So = Doc3So & IIf(Chuc <= 1, "một ", "mốt ")
  35.             Case 4
  36.                 Select Case Chuc
  37.                     Case 0 : If Tram = 0 Or Tram = 4 Then Doc3So = Doc3So & "bốn " Else Doc3So = Doc3So & "tư "
  38.                     Case 1, 4 : Doc3So = Doc3So & "bốn "
  39.                     Case Else : Doc3So = Doc3So & "tư "
  40.                 End Select
  41.             Case 5 : Doc3So = Doc3So & IIf(Chuc = 0, "năm ", "lăm ")
  42.             Case Else : Doc3So = Doc3So & ChuSo(Dvi)
  43.         End Select
  44.         If Tram = 0 AndAlso Chuc = 0 AndAlso Dvi = 0 Then Doc3So = ""
  45.     End Function
  46.  
  47.     Function DocnSo(ByVal so As Long) As String
  48.         DocnSo = ""
  49.         Dim cso As String = Trim(Str(so))
  50.         Select Case Len(cso)
  51.             Case 1, 2, 3 : DocnSo = Doc3So(so) & SoTien(0)
  52.             Case Else
  53.                 Do While Len(cso) Mod 3 <> 0
  54.                     cso = "0" & cso
  55.                 Loop
  56.  
  57.                 Dim n As Byte = 0
  58.                 For i As Integer = Len(cso) - 2 To 1 Step -3
  59.                     DocnSo = Doc3So(Val(Mid(cso, i, 3)), IIf(i = 1, 0, 1)) & IIf(Val(Mid(cso, i, 3)) = 0, "", SoTien(n)) & DocnSo
  60.                     n += 1
  61.                 Next
  62.         End Select
  63.     End Function    
  64. End Module
  65.  


Test:
  1. Msgbox(DocnSo("134045009") & "Đồng")

Re: [VB.NET] Chuyển đổi tiền

Đã gửi: T.Sáu 16/11/2012 12:03 pm
gửi bởi vietteiv
[mod=]tác giả sửa bài viết lại theo mẫu qui định của box[/mod]

Re: [VB.NET] Chuyển đổi tiền

Đã gửi: T.Hai 19/05/2014 10:30 pm
gửi bởi nhanmobicom
Thanks code !
Mong tác giả code có thể viết hoa đầu chuổi dùm.
vd: Hai mươi lăm ngàn ba trăm đồng
vd: Bốn mươi ba đồng

Re: [VB.NET] Chuyển đổi tiền

Đã gửi: T.Ba 25/10/2016 4:51 pm
gửi bởi thuanedp
thêm đồng chẵn cuối cùng nữa thì sao bạn???