Вот более полное / улучшенное решение, основанное на паре идей, также размещенных здесь. Включает исправления грамматики / дефиса, опциональную капитализацию, длинную поддержку, поддержку нуля, но все еще очень краткую (VB.Net):
Function NumberToCapitalizedWords(ByVal n As Long) As String
Return New System.Globalization.CultureInfo("en-US", False).TextInfo.ToTitleCase(NumberToWords(n))
End Function
Function NumberToWords(ByVal n As Long) As String
Return LTrim(NumberToWords(n, False, False))
End Function
Function NumberToWords(ByVal n As Long, ByVal recursed As Boolean, ByVal iesLast As Boolean) As String
If (n < 0) Then
Return "negative" + NumberToWords(-n, False, False)
ElseIf (n = 0) Then
If recursed Then
Return ""
End If
Return "zero"
ElseIf (n < 20) Then
Return If(iesLast, "-", " ") + New String() {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}(n - 1)
ElseIf (n < 100) Then
Return " " + New String() {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}(n \ 10 - 2) + NumberToWords(n Mod 10, True, True)
ElseIf (n < 1000) Then
Return NumberToWords(n \ 100, True, False) + " hundred" + NumberToWords(n Mod 100, True, False)
Else
Dim log1000 As Integer = Math.Floor(Math.Log(n, 1000))
Return NumberToWords(n \ PowerNoFloat(1000, log1000), True, False) + " " + New String() {"thousand", "million", "billion", "trillion", "quadrillion", "quintillion"}(log1000 - 1) + NumberToWords(n Mod PowerNoFloat(1000, log1000), True, False)
End If
End Function
Function PowerNoFloat(ByRef base As Long, ByRef power As Integer) As Long
If power < 0 Then
Return 0
End If
Dim result As Long = 1
For i As Integer = 1 To power
result *= base
Next
Return result
End Function
Добавьте значение DWORD с именем « Отключено
» для
HKCU \ Software \ Microsoft \ Internet Explorer \ IEDevTools
и присвойте ему значение « 1
»