• 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#

Điều hành viên: tungcan5diop, QUANITGROBEST

Nội qui chuyên mục
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
Bài viết: 23
Ngày tham gia: T.Sáu 18/04/2008 5:49 pm
Has thanked: 2 time
Been thanked: 14 time

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

Gửi bàigửi bởi Romeo8x » T.Sáu 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:
  1. Msgbox(DocnSo("134045009") & "Đồng")
Sửa lần cuối bởi Romeo8x vào ngày T.Sáu 16/11/2012 5:33 pm với 2 lần sửa.



Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1318
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: 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 time
Been thanked: 69 time
Liên hệ:

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

Gửi bàigửi bởi vietteiv » T.Sáu 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
Bài viết: 1
Ngày tham gia: T.Năm 15/04/2010 12:10 pm
Has thanked: 1 time

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

Gửi bàigửi bởi nhanmobicom » T.Hai 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
Bài viết: 1
Ngày tham gia: T.Ba 14/01/2014 7:29 am

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

Gửi bàigửi bởi thuanedp » T.Ba 25/10/2016 4:51 pm

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


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

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách