• 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

## Chuyển số thành chữ Tiếng Anh

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
tungcan5diop
Cựu chiến binh Bài viết: 1123
Ngày tham gia: T.Tư 24/09/2008 4:04 pm
Đến từ: TPHCM
Has thanked: 1 time
Been thanked: 28 time

### Chuyển số thành chữ Tiếng Anh

1. Public Function ReadMoney(ByVal strNumber As String, VarCurrency As String) As String
2.     '===== Note : Apply to VND only - read in English
3.    '===== strNumber contains 12 digitals as maximum
4.    Dim tmp3Num(4) As Integer, Number As String, I As Integer, j As Integer, k As Integer, strResult As String, bSmallNum As Boolean
5.     Dim temp As Double
6.     Dim tempnumber As String
7.
8.     If Not IsNumeric(strNumber) Then ReadMoney = "Please enter a number only !": Exit Function
9.     If Len(strNumber) > 12 Then ReadMoney = "Too large number ! The maximum of this number is 999.999.999.999 (12 digitals only)": Exit Function
10.
11.     temp = Val(strNumber) - Int(Val(strNumber))
12.     If temp <> 0 Then tempnumber = ReadMoney(CInt(temp * 100), "")
13.     Number = Trim(Int(strNumber))
14.     If CDbl(Number) = 0 Then ReadMoney = "Zero " & VarCurrency: Exit Function
15.     Dim Hang
16.     Hang = Array("thousand", "million", "billion")
17.     j = Len(Number) \ 3
18.     If Len(Number) Mod 3 > 0 Then j = j + 1
19.     For I = j - 1 To 0 Step -1
20.         tmp3Num(I) = CInt(Right(Number, IIf(Len(Number) >= 3, 3, Len(Number))))
21.         If I > 0 Then
22.             Number = Left(Number, Len(Number) - 3)
23.         End If
24.     Next I
25.     k = 0
26.     For I = j - 1 To 0 Step -1
27.         If I = j - 1 Then
28.                 If Len(CStr(tmp3Num(I))) = 3 Then
29.                     strResult = Read3Num(tmp3Num(I), VarCurrency, True)
30.                 Else
31.                     bSmallNum = True
32.                     If CDbl(strNumber) >= 100 Then bSmallNum = False
33.                     strResult = Read2Num(tmp3Num(I), VarCurrency, True, bSmallNum)
34.                 End If
35.         Else
36.                 If Len(CStr(tmp3Num(I))) = 3 Then
37.                     strResult = Read3Num(tmp3Num(I), VarCurrency) & Space(1) & IIf(tmp3Num(I) > 0, Hang(k) & " ", "") & strResult
38.                 Else
39.                     strResult = Read2Num(tmp3Num(I), VarCurrency) & Space(1) & IIf(tmp3Num(I) > 0, Hang(k) & " ", "") & strResult
40.                 End If
41.                 k = k + 1
42.         End If
43.     Next I
44.     Dim firstchar As String
45.     If Len(tempnumber) > 0 Then strResult = strResult + " point " + tempnumber
46.     strResult = Trim(strResult)
47.     firstchar = UCase(Left(strResult, 1))
48.     strResult = VarCurrency & " " & firstchar & Right(strResult, Len(strResult) - 1)
49.     ReadMoney = strResult
50. End Function

1. Public Function Read3Num(ByVal intNum As Integer, VarCurrency As String, Optional bLastNum As Boolean = False) As String
2.     If intNum > 1000 Then Read3Num = "": Exit Function
3.     Dim Tram
4.     Tram = Array("one", "two", "three", "four", "five", "six", "seven", "eight", "nine")
5.     If intNum = 0 Then Read3Num = "": Exit Function
6.     Read3Num = Tram((intNum \ 100) - 1) & " hundred"
7.     If intNum Mod 100 > 0 Then
8.         If bLastNum Then Read3Num = Read3Num
9.         Read3Num = Read3Num & Space(1) & Read2Num(intNum Mod 100, VarCurrency)
10.     End If
11.     If bLastNum Then Read3Num = Read3Num
12. End Function

1. Public Function Read2Num(ByVal intNum As Integer, VarCurrency As String, Optional bLastNum As Boolean = False, Optional bSmallNum As Boolean = False) As String
2.     If intNum > 100 Then Read2Num = "": Exit Function
3.     Dim donvi, Chuc
4.     donvi = Array("one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", _
5.                                 "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen")
6.     Chuc = Array("twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety")
7.     Select Case intNum
8.         Case 1 To 19
9.             If bLastNum And (Not bSmallNum) Then Read2Num = Read2Num
10.             Read2Num = Read2Num & Space(1) & donvi(intNum - 1)
11.         Case Is > 19
12.             Read2Num = Chuc(CInt(intNum \ 10) - 2)
13.             If intNum Mod 10 > 0 Then
14.                 If bLastNum And (Not bSmallNum) Then Read2Num = Read2Num
15.                 Read2Num = Read2Num & Space(1) & donvi((intNum Mod 10) - 1)
16.             End If
17.         Case Else
18.                Read2Num = ""
19.     End Select
20.     If bLastNum Then Read2Num = Read2Num
21. End Function

Hỡi thế gian bug(lỗi) là gì?
Mà sửa...hoài không hết!

Khai Nguyen
Bài viết: 4
Ngày tham gia: T.Bảy 10/08/2013 9:47 pm
Has thanked: 11 time

### Re: Chuyển số thành chữ Tiếng Anh

Nhân tiện đây mình cũng có góp thêm với tất cả mấy hàm dịch số thành chữ =VND Và USD xin góp thêm với diễn đàn đây là Link :