home *** CD-ROM | disk | FTP | other *** search
- Attribute VB_Name = "mdlNum2Word"
- Enum rModes
- Normal = 0
- Placement = 1
- End Enum
-
- Function Num2Word(Number As Double, rMode As rModes)
- On Error GoTo error
- Dim Num As Long
- Num = Int(Abs(Number))
- If Number < 0 Then Num2Word = "negative "
- If Len(CStr(Num)) > 9 Then GoTo error
- Dim Un As Integer, Th As Integer, Mi As Integer
- Un = (Num Mod 1000)
- If Num > 999 Then Th = Int((Num Mod 1000000 - Un) / 1000)
- If Num > 999999 Then Mi = Int((Num Mod 1000000000 - Th) / 1000000)
- If Mi > 0 Then
- Num2Word = Num2Word & Group(Mi) & " million"
- If Th = 0 And Un = 0 And rMode = Placement Then
- Num2Word = Num2Word & "th"
- GoTo Fraction
- End If
- End If
- If Th > 0 Then
- If Mi <> 0 Then Num2Word = Num2Word & ", "
- Num2Word = Num2Word & Group(Th) & " thousand"
- If Un = 0 And rMode = Placement Then
- Num2Word = Num2Word & "th"
- GoTo Fraction
- End If
- End If
- If Un > 0 Then
- If Mi > 0 Or Th > 0 Then
- If Un < 100 Then
- Num2Word = Num2Word & " and "
- Else
- Num2Word = Num2Word & ", "
- End If
- End If
- Num2Word = Num2Word & Group(Un, rMode)
- End If
- Fraction:
- If rMode = Normal And Fr(Number) <> 0 Then Num2Word = Num2Word & Fraction(Number)
- Exit Function
- error:
- Num2Word = "Error"
- End Function
-
- Function Group(ByVal Number As Integer, Optional rMode As rModes = Normal)
- If Number > 99 Then
- Group = BaseNorm(Left(CStr(Number), 1)) & " hundred"
- If rMode = Placement And Number Mod 100 = 0 Then Group = Group & "th"
- If Number Mod 100 <> 0 Then Group = Group & " and "
- End If
- If Mid(Format(Number, "000"), 2, 1) <> "0" And Mid(Format(Number, "000"), 2, 1) <> "1" Then
- If rMode = Placement And Number Mod 10 = 0 Then
- Group = Group & BasePlace(Val(Mid(Format(Number, "000"), 2, 1) & "0"))
- Else
- Group = Group & BaseNorm(Val(Mid(Format(Number, "000"), 2, 1) & "0"))
- End If
- If Number Mod 10 <> 0 Then Group = Group & "-"
- End If
- If Number < 20 Then
- If rMode = Normal Then Group = BaseNorm(Number) Else Group = BasePlace(Number)
- Exit Function
- End If
- Number = Number Mod 100
- If Number > 19 Then Number = Number Mod 10
- If Number = 0 Then Exit Function
- If rMode = Normal Then
- Group = Group & BaseNorm(Number)
- Else
- Group = Group & BasePlace(Number)
- End If
- End Function
-
- Private Function BaseNorm(ByVal Number As Integer)
- Select Case Number
- Case 0: BaseNorm = "zero"
- Case 1: BaseNorm = "one"
- Case 2: BaseNorm = "two"
- Case 3: BaseNorm = "three"
- Case 4: BaseNorm = "four"
- Case 5: BaseNorm = "five"
- Case 6: BaseNorm = "six"
- Case 7: BaseNorm = "seven"
- Case 8: BaseNorm = "eight"
- Case 9: BaseNorm = "nine"
- Case 10: BaseNorm = "ten"
- Case 11: BaseNorm = "eleven"
- Case 12: BaseNorm = "twelve"
- Case 13: BaseNorm = "thirteen"
- Case 14: BaseNorm = "fourteen"
- Case 15: BaseNorm = "fifteen"
- Case 16: BaseNorm = "sixteen"
- Case 17: BaseNorm = "seventeen"
- Case 18: BaseNorm = "eighteen"
- Case 19: BaseNorm = "nineteen"
- Case 20: BaseNorm = "twenty"
- Case 30: BaseNorm = "thirty"
- Case 40: BaseNorm = "forty"
- Case 50: BaseNorm = "fifty"
- Case 60: BaseNorm = "sixty"
- Case 70: BaseNorm = "seventy"
- Case 80: BaseNorm = "eighty"
- Case 90: BaseNorm = "ninety"
- End Select
- End Function
-
- Private Function BasePlace(ByVal Number As Long)
- Select Case Number
- Case 1: BasePlace = "first"
- Case 2: BasePlace = "second"
- Case 3: BasePlace = "third"
- Case 4: BasePlace = "forth"
- Case 5: BasePlace = "fifth"
- Case 6: BasePlace = "sixth"
- Case 7: BasePlace = "seventh"
- Case 8: BasePlace = "eighth"
- Case 9: BasePlace = "nineth"
- Case 10: BasePlace = "tenth"
- Case 11: BasePlace = "eleventh"
- Case 12: BasePlace = "twelfth"
- Case 13: BasePlace = "thirteenth"
- Case 14: BasePlace = "fourteenth"
- Case 15: BasePlace = "fifteenth"
- Case 16: BasePlace = "sixteenth"
- Case 17: BasePlace = "seventeenth"
- Case 18: BasePlace = "eighteenth"
- Case 19: BasePlace = "nineteenth"
- Case 20: BasePlace = "twentieth"
- Case 30: BasePlace = "thirtieth"
- Case 40: BasePlace = "fortieth"
- Case 50: BasePlace = "fiftieth"
- Case 60: BasePlace = "sixtieth"
- Case 70: BasePlace = "seventieth"
- Case 80: BasePlace = "eightieth"
- Case 90: BasePlace = "ninetieth"
- End Select
- End Function
-
- Function Fraction(Number As Double)
- Dim Num As String: Num = Fr(Number)
- Select Case Num
- Case "5": Fraction = " and a half"
- Case "25": Fraction = " and a quarter"
- Case "75": Fraction = " and three quarters"
- Case "2": Fraction = " and a fifth"
- Case "4": Fraction = " and two fifths"
- Case "6": Fraction = " and three fifths"
- Case "8": Fraction = " and four fifths"
- Case "125": Fraction = " and an eighth"
- Case "375": Fraction = " and three eighths"
- Case "625": Fraction = " and five eighths"
- Case "875": Fraction = " and seven eighths"
- Case Else
- Fraction = " point"
- For i = 1 To Len(Num)
- Fraction = Fraction & " " & BaseNorm(Mid(Num, i, 1))
- Next i
- End Select
- End Function
-
- Private Function Fr(Number As Double)
- For i = 1 To Len(CStr(Number))
- If Mid(CStr(Number), i, 1) = "." Then
- For j = i + 1 To Len(CStr(Number))
- Fr = Fr & Mid(CStr(Number), j, 1)
- Next j
- Exit Function
- End If
- Next i
- End Function