thanhan1234
Thành viên mới

- Tham gia
- 3/8/07
- Bài viết
- 30
- Được thích
- 1
tớ đang có 1 code đọc số, tại tớ sửa mấy cái nên bị lỗi bạn xem hộ với:
nếu cứ đọc số 1.000, 10.000, 100.000.000 là nó thành 2 lần ví dụ: Một triệu một triệu
Còn 1 ý tưởng nữa tớ muốn các bạn cùng làm thử là. Các bạn có thể sửa hàm này thành dạng thế này đc ko: doc_so(Number;Kytu)
Trong đó số Number là số cần đọc
Còn Kytu có dang text là lợi tiền cần đọc, Ví dụ doc_so(1000;"VND") --> một nghìn đồng
doc_so(1000;"USD") --> một nghìn đô la
doc_so(1000;"EUR") --> một nghìn eurô
==================== Code doc so ========================================
Public Function doc_so(tienvao)
Dim ketqua, sotien, nhom, chu, dich, s1, s2, s3 As String
Dim i, j, vitri As Byte, s As Double
Dim hang, doc, dem
tienvao = Int(tienvao)
If tienvao = 0 Then
ketqua = "Kh«ng"
Else
If Abs(tienvao) >= 1E+15 Then
ketqua = "Sè qu¸ lín."
Else
If tienvao <= 0 Then
ketqua = "Trõ" & Space(1)
Else
ketqua = Space(0)
End If
sotien = Abs(tienvao)
sotien = Right(Space(15) & sotien, 15)
hang = Array("none", "tr¨m", "m­¬i", "kh¸c")
doc = Array("none", "ngµn tû", "tû", "triÖu", "ngh×n", "")
dem = Array("none", "mét", "hai", "ba", "bèn", "n¨m", "s¸u", "b¶y", "t¸m", "chÝn")
For i = 1 To 5
nhom = Mid(sotien, i * 3 - 2, 3)
If nhom <> Space(3) Then
Select Case nhom
Case "000"
If i = 5 Then
chu = ""
End If
Case Else
s1 = Left(nhom, 1)
s2 = Mid(nhom, 2, 1)
s3 = Right(nhom, 1)
chu = Space(0)
hang(3) = doc(i)
For j = 1 To 3
dich = Space(0)
s = Val(Mid(nhom, j, 1))
If s > 0 Then
dich = dem(s) & Space(1) & hang(j) & Space(1)
End If
Select Case j
Case 2 And s = 1
dich = "m­êi" & Space(1)
Case 3 And s = 0 And nhom <> Space(2) & "0"
dich = hang(j) & Space(1)
Case 3 And s = 5 And s2 <> Space(1) And s2 <> "0"
dich = "I" & Mid(dich, 2)
Case 2 And s = 0 And s3 <> "0"
If (s1 >= "1" And s1 <= "9") Or (s1 = "0" And i = 4) Then
dich = "lÎ" & Space(1)
End If
End Select
chu = chu & dich
Next j
End Select
vitri = InStr(1, chu, "m­¬i mèt", 1)
If vitri > 0 Then Mid(chu, vitri, 9) = "m­êi mét"
ketqua = ketqua & chu
End If
Next i
End If
End If
doc_so = UCase(Left(ketqua, 1)) & Mid(ketqua, 2)
End Function
---------------
nếu cứ đọc số 1.000, 10.000, 100.000.000 là nó thành 2 lần ví dụ: Một triệu một triệu
Còn 1 ý tưởng nữa tớ muốn các bạn cùng làm thử là. Các bạn có thể sửa hàm này thành dạng thế này đc ko: doc_so(Number;Kytu)
Trong đó số Number là số cần đọc
Còn Kytu có dang text là lợi tiền cần đọc, Ví dụ doc_so(1000;"VND") --> một nghìn đồng
doc_so(1000;"USD") --> một nghìn đô la
doc_so(1000;"EUR") --> một nghìn eurô
==================== Code doc so ========================================
Public Function doc_so(tienvao)
Dim ketqua, sotien, nhom, chu, dich, s1, s2, s3 As String
Dim i, j, vitri As Byte, s As Double
Dim hang, doc, dem
tienvao = Int(tienvao)
If tienvao = 0 Then
ketqua = "Kh«ng"
Else
If Abs(tienvao) >= 1E+15 Then
ketqua = "Sè qu¸ lín."
Else
If tienvao <= 0 Then
ketqua = "Trõ" & Space(1)
Else
ketqua = Space(0)
End If
sotien = Abs(tienvao)
sotien = Right(Space(15) & sotien, 15)
hang = Array("none", "tr¨m", "m­¬i", "kh¸c")
doc = Array("none", "ngµn tû", "tû", "triÖu", "ngh×n", "")
dem = Array("none", "mét", "hai", "ba", "bèn", "n¨m", "s¸u", "b¶y", "t¸m", "chÝn")
For i = 1 To 5
nhom = Mid(sotien, i * 3 - 2, 3)
If nhom <> Space(3) Then
Select Case nhom
Case "000"
If i = 5 Then
chu = ""
End If
Case Else
s1 = Left(nhom, 1)
s2 = Mid(nhom, 2, 1)
s3 = Right(nhom, 1)
chu = Space(0)
hang(3) = doc(i)
For j = 1 To 3
dich = Space(0)
s = Val(Mid(nhom, j, 1))
If s > 0 Then
dich = dem(s) & Space(1) & hang(j) & Space(1)
End If
Select Case j
Case 2 And s = 1
dich = "m­êi" & Space(1)
Case 3 And s = 0 And nhom <> Space(2) & "0"
dich = hang(j) & Space(1)
Case 3 And s = 5 And s2 <> Space(1) And s2 <> "0"
dich = "I" & Mid(dich, 2)
Case 2 And s = 0 And s3 <> "0"
If (s1 >= "1" And s1 <= "9") Or (s1 = "0" And i = 4) Then
dich = "lÎ" & Space(1)
End If
End Select
chu = chu & dich
Next j
End Select
vitri = InStr(1, chu, "m­¬i mèt", 1)
If vitri > 0 Then Mid(chu, vitri, 9) = "m­êi mét"
ketqua = ketqua & chu
End If
Next i
End If
End If
doc_so = UCase(Left(ketqua, 1)) & Mid(ketqua, 2)
End Function
---------------