Thứ Ba, 16 tháng 9, 2008

Thuật toán chuyển từ số sang chữ tiếng Anh, dùng trong môi trường Microsoft Office, Visual Basic, ASP, ...

Function Read1Word(r1 As Long) As String
Select Case r1
Case 0
Read1Word = "zero"
Case 1
Read1Word = "one"
Case 2
Read1Word = "two"
Case 3
Read1Word = "three"
Case 4
Read1Word = "four"
Case 5
Read1Word = "five"
Case 6
Read1Word = "six"
Case 7
Read1Word = "seven"
Case 8
Read1Word = "eight"
Case 9
Read1Word = "nine"
End Select
End Function

Function Read2Word(r2 As Long) As String
Select Case r2
Case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Read2Word = Read1Word(r2)
Case 10
Read2Word = "ten"
Case 11
Read2Word = "eleven"
Case 12
Read2Word = "twelve"
Case 13
Read2Word = "thirteen"
Case 14
Read2Word = "fourteen"
Case 15
Read2Word = "fifteen"
Case 16
Read2Word = "sixteen"
Case 17
Read2Word = "seventeen"
Case 18
Read2Word = "eighteen"
Case 19
Read2Word = "nineteen"
Case 20
Read2Word = "twenty"
Case 30
Read2Word = "thirty"
Case 40
Read2Word = "forty"
Case 50
Read2Word = "fifty"
Case 60
Read2Word = "sixty"
Case 70
Read2Word = "seventy"
Case 80
Read2Word = "eighty"
Case 90
Read2Word = "ninety"
Case Else
Read2Word = Read2Word(Int(r2 \ 10) * 10) + " " + Read1Word(r2 - Int(r2 \ 10) * 10)
End Select
End Function

Function Read3Word(r3 As Long) As String
If r3 < 10 Then
Read3Word = Read1Word(r3)
Else
If r3 < 100 Then
Read3Word = Read2Word(r3)
Else
Read3Word = Read1Word(Int(r3 \ 100)) + " hundred" + IIf(Read2Word(r3 - Int(r3 \ 100) * 100) = "zero", "", " and " + Read2Word(r3 - Int(r3 \ 100) * 100))
End If
End If
End Function

Function ReadWord(r As String) As String
Dim s As String
If Len(r) > 9 Then r = Left(r, 9)
Dim r1 As Long
Dim r2 As Long
s = " "
If InStr(r, ".") > 0 Then
r1 = Val(Left(r, InStr(r, ".") - 1))
r2 = Val(Mid(r, InStr(r, "."), 3)) * 100
Else
r1 = Val(r)
r2 = 0
End If
If r1 < 10 Then
s = Read1Word(r1)
Else
If r1 < 100 Then
s = Read2Word(r1)
Else
If r1 < 1000 Then
s = Read3Word(r1)
Else
If r1 < 1000000 Then
If (r1 \ 1000) * 1000 = r1 Then
s = Read3Word(Int(r1 \ 1000)) + " thousand"
Else
s = Read3Word(Int(r1 \ 1000)) + " thousand and " + Read3Word(r1 - Int(r1 \ 1000) * 1000)
End If
Else
If (r1 \ 1000000) * 1000000 = r1 Then
s = Read3Word(Int(r1 \ 1000000)) + " million"
Else
s = Read3Word(Int(r1 \ 1000000)) + " million and " + ReadWord(r1 - Int(r1 \ 1000000) * 1000000)
End If
End If
End If
End If
End If
If r2 > 0 Then s = s + " point " + Read3Word(r2)
s = UCase$(Left(s, 1)) + LCase$(Mid$(s, 2, 255))
ReadWord = s
End Function

----------------

Cách dùng: readword("123456789.12")

Không có nhận xét nào: