mình có cái đoạn VB viết dịch số thành chữ như sau :
cái này là dịch vàng SJC
vd: nhập là 19.6 thì đoạn VB bên dưới nó dịch là: "mười chín chỉ vàng sjc sáu muơi phân" ----> nó dịch bị sai
chính xác là nó phải dich là : "mười chín chỉ vàng sjc sáu phân" mới đúng.
bạn nào có kinh nghiệm chỉnh dùm mình cho nó dịch đúng giúp, xin cảm ơn.
đoạn code bên dưới nhe
----------------------------------------------------------------------
Function XAU(BAONHIEU)
Dim KETQUA, SOTIEN, NHOM, CHU, S1, S2, S3, DICH As String
Dim N, J, VITRI As Byte, S As Double, HANG, DOC, DEM
If BAONHIEU = 0 Then
KETQUA = "Không chỉ vàng SJC"
Else
If Abs(BAONHIEU) > 1E+15 Then
KETQUA = "Số quá lớn"
Else
GoSub LAMVIECDI
End If
End If
XAU = UCase(Left(KETQUA, 1)) + Mid(KETQUA, 2)
Exit Function
LAMVIECDI:
If BAONHIEU < 0 Then
KETQUA = "Tru" & Space(1)
Else
KETQUA = Space(0)
End If
SOTIEN = Format(Abs(BAONHIEU), "##############0.00")
SOTIEN = Right(Space(15) & SOTIEN, 18)
HANG = Array("None", "trăm", "mươi", "gi do")
DOC = Array("None", "ngàn tỷ", "tỷ", "triệu", "ngàn", "chỉ vàng SJC", "phân.")
DEM = Array("None", "một", "hai", "ba", "bốn", "năm", "sáu", "bảy", "tám", "chín")
For N = 1 To 6
NHOM = Mid(SOTIEN, N * 3 - 2, 3)
If NHOM <> Space(3) Then
Select Case NHOM
Case "000"
If N = 5 Then CHU = "chỉ vàng SJC" & Space(1) Else CHU = Space(0)
Case ".00"
CHU = "chẳn."
Case Else
S1 = Left(NHOM, 1): S2 = Mid(NHOM, 2, 1): S3 = Right(NHOM, 1)
CHU = Space(0): HANG(3) = DOC(N)
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)
Select Case J
Case 2 And S = 1
DICH = "mười" & Space(2)
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 = "l" & Mid(DICH, 2)
Case 2 And S = 0 And S3 <> "0"
If (S1 >= "1" And S1 <= "9") Or (S1 = "0" And N = 5) Then DICH = "lẻ" & Space(1)
End Select
CHU = CHU & DICH
Next J
End Select
VITRI = InStr(N, CHU, "mươi mốt", 1)
KETQUA = KETQUA & CHU
End If
Next N
Return
End Function
Bookmarks