• 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] Chuyển đổi tiền

Những thủ thuật, bí quyết giúp giải quyết nhanh công việc khi lập trình với Visual Basic .NET và C#

Moderators: tungcan5diop, QUANITGROBEST

Forum rules
1. Gửi bài viết tại đây, người quản lý sẽ chuyển vào trong nếu bài viết đạt yêu cầu.
2. Gửi bài theo mẫu qui định: viewtopic.php?f=2&t=5
[thuthuat]Tên thủ thuật[/thuthuat]
[tacgia]Tên tác giả[/tacgia]
[mota]Mô tả, chú thích công dụng của thủ thuật[/mota]
[end][/end]
Romeo8x
Thành viên chính thức
Thành viên chính thức
Posts: 23
Joined: Fri 18/04/2008 5:49 pm
Has thanked: 2 times
Been thanked: 14 times

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

Postby Romeo8x » Fri 16/11/2012 10:19 am

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:
[vbnet]Msgbox(DocnSo("134045009") & "Đồng")[/vbnet]
Last edited by Romeo8x on Fri 16/11/2012 5:33 pm, edited 2 times in total.



User avatar
vietteiv
Quản trị
Quản trị
Posts: 1323
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

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

Postby vietteiv » Fri 16/11/2012 12:03 pm

[mod=]tác giả sửa bài viết lại theo mẫu qui định của box[/mod]

nhanmobicom
Posts: 1
Joined: Thu 15/04/2010 12:10 pm
Has thanked: 1 time

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

Postby nhanmobicom » Mon 19/05/2014 10:30 pm

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

thuanedp
Posts: 1
Joined: Tue 14/01/2014 7:29 am

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

Postby thuanedp » Tue 25/10/2016 4:51 pm

thêm đồng chẵn cuối cùng nữa thì sao bạn???


Return to “[.NET] Thủ thuật, mẹo vặt”

Who is online

Users browsing this forum: No registered users and 1 guest