Этот скрипт может быть сохранен в num2txt.vbs
для тестирования:
Option Explicit
'-------------------------------------------------------------------------'
' Numbers to words -- proof of concept, nerfed to serve up to a trillion '
'-------------------------------------------------------------------------'
Dim i, j, a, b, c, d, e, f, s
a = array( _
"zero", _
"one", _
"two", _
"three", _
"four", _
"five", _
"six", _
"seven", _
"eight", _
"nine", _
"ten", _
"eleven", _
"twelve", _
"thirteen", _
"fourteen", _
"fifteen", _
"sixteen", _
"seventeen", _
"eighteen", _
"nineteen" _
)
b = array( _
"twenty", _
"thirty", _
"forty", _
"fifty", _
"sixty", _
"seventy", _
"eighty", _
"ninety" _
)
c = array( _
"hundred", _
"thousand", _
"million", _
"billion", _
"trillion" _
)
'-------------------------------------------------------------------------'
' Returns the text for numbers; this can definitely be optimised further '
'-------------------------------------------------------------------------'
Function WhatAmI(i)
Dim s
If i >= 1000000000000 Then
If Len(i) = 15 Then s = WhatAmI(Left(i, 3)) & " " & c(4)
If Len(i) = 14 Then s = WhatAmI(Left(i, 2)) & " " & c(4)
If Len(i) = 13 Then s = WhatAmI(Left(i, 1)) & " " & c(4)
If Right(i, 12) <> "000000000000" Then
d = Mid(Right(i, 12), 1, 1)
e = Mid(Right(i, 12), 2, 1)
f = Mid(Right(i, 12), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f) & " " & c(3)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
If Right(i, 9) <> "000000000" Then
d = Mid(Right(i, 9), 1, 1)
e = Mid(Right(i, 9), 2, 1)
f = Mid(Right(i, 9), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f) & " " & c(2)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
If Right(i, 6) <> "000000" Then
d = Mid(Right(i, 6), 1, 1)
e = Mid(Right(i, 6), 2, 1)
f = Mid(Right(i, 6), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f) & " " & c(1)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
If Right(i, 3) <> "000" Then
d = Mid(Right(i, 3), 1, 1)
e = Mid(Right(i, 3), 2, 1)
f = Mid(Right(i, 3), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
ElseIf i >= 1000000000 Then
If Len(i) = 12 Then s = WhatAmI(Left(i, 3)) & " " & c(3)
If Len(i) = 11 Then s = WhatAmI(Left(i, 2)) & " " & c(3)
If Len(i) = 10 Then s = WhatAmI(Left(i, 1)) & " " & c(3)
If Right(i, 9) <> "000000000" Then
d = Mid(Right(i, 9), 1, 1)
e = Mid(Right(i, 9), 2, 1)
f = Mid(Right(i, 9), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f) & " " & c(2)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
If Right(i, 6) <> "000000" Then
d = Mid(Right(i, 6), 1, 1)
e = Mid(Right(i, 6), 2, 1)
f = Mid(Right(i, 6), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f) & " " & c(1)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
If Right(i, 3) <> "000" Then
d = Mid(Right(i, 3), 1, 1)
e = Mid(Right(i, 3), 2, 1)
f = Mid(Right(i, 3), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
ElseIf i >= 1000000 Then
If Len(i) = 9 Then s = WhatAmI(Left(i, 3)) & " " & c(2)
If Len(i) = 8 Then s = WhatAmI(Left(i, 2)) & " " & c(2)
If Len(i) = 7 Then s = WhatAmI(Left(i, 1)) & " " & c(2)
If Right(i, 6) <> "000000" Then
d = Mid(Right(i, 6), 1, 1)
e = Mid(Right(i, 6), 2, 1)
f = Mid(Right(i, 6), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f) & " " & c(1)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
If Right(i, 3) <> "000" Then
d = Mid(Right(i, 3), 1, 1)
e = Mid(Right(i, 3), 2, 1)
f = Mid(Right(i, 3), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
ElseIf i >= 1000 Then
If Len(i) = 6 Then s = WhatAmI(Left(i, 3)) & " " & c(1)
If Len(i) = 5 Then s = WhatAmI(Left(i, 2)) & " " & c(1)
If Len(i) = 4 Then s = WhatAmI(Left(i, 1)) & " " & c(1)
If Right(i, 3) <> "000" Then
d = Mid(Right(i, 3), 1, 1)
e = Mid(Right(i, 3), 2, 1)
f = Mid(Right(i, 3), 3, 1)
If d <> 0 Then
s = s & ", "
s = s & WhatAmI(d & e & f)
ElseIf e <> 0 Then
s = s & " and " & WhatAmI(e & f)
ElseIf f <> 0 Then
s = s & " and " & WhatAmI(f)
End If
End If
ElseIf i >= 100 Then
s = a(Left(i, 1)) & " " & c(0)
If Right(i, 2) <> "00" Then s = s & " and " & WhatAmI(Right(i, 2))
ElseIf i >= 90 Then
s = b(7)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf i >= 80 Then
s = b(6)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf i >= 70 Then
s = b(5)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf i >= 60 Then
s = b(4)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf i >= 50 Then
s = b(3)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf i >= 40 Then
s = b(2)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf i >= 30 Then
s = b(1)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf (i >= 20) Then
s = b(0)
If Right(i, 1) > 0 Then s = s & "-" & a(Right(i, 1))
ElseIf (i > 9) Then
s = a(i)
ElseIf (i >= 0 AND i <= 9) Then
s = a(i)
End If
WhatAmI = s
End Function
'-------------------------------------------------------------------------'
' Ensure input is really numeric '
'-------------------------------------------------------------------------'
Function is_numeric(s)
Dim i, c
is_numeric = True
If IsNull(s) OR s = "" Then
is_numeric = False
Exit Function
End If
If s = "" Then
is_numeric = False
Exit Function
End If
For i = 1 To Len(s)
c = Mid(s, i, 1)
If Asc(c) < 48 OR Asc(c) > 57 Then
is_numeric = False
Exit For
End If
Next
End Function
i = InputBox("Enter the number you wish to convert:", "Numbers to Text")
If i <> "" Then i = Replace(i, ",", "") ' In case input was 1,100 or something '
If Len(i) > 15 Then
MsgBox "Sorry, numbers larger than a trillion aren't supported", 0, "Fail"
End If
If NOT is_numeric(i) Then
MsgBox "That is not a valid number... Integers only, please", 0, "Fail"
Else
i = CDbl(i)
MsgBox FormatNumber(i, 0) & " = " & WhatAmI(i), 0, "Converted"
End If
Пример выходных данных:
110,314 = one hundred and ten thousand, three hundred and fourteen
540,610,333 = five hundred and forty million, six hundred and ten thousand, three hundred and thirty-three