Function Прописью(Number As Long, Optional Rod As Integer = 1, _
Optional R5 As String = "", Optional R1 As String = "", _
Optional R2 As String = "", Optional ByRef Sklonenie As Integer) As String
' Записывает прописью число с существительным
' Number - собственно число (от -2 147 483 648 до 2 147 483 647)
' Rod - род существительного (1 - муж. (по умолчанию), 2 - жен., 3 - ср.)
' R5 - существительное в форме "пять штук" (по умолчанию - "")
' R1 - существительное в форме "одна штука" (по умолчанию - "")
' R2 - существительное в форме "две штуки" (по умолчанию - "")
' Sklonenie - переменная, в которую будет помещено склонение
' существительного (5 - "пять штук", 1 - "одна штука", 2 - "две штуки")
' ВНИМАНИЕ! Использует функцию Трехзначный (см. ниже)
Dim p As String, skl As Integer, n As Long
p = ""
n = Abs(Number)
Sklonenie = 5
p = p & Трехзначный(n \ 1000000000, skl, 1, "миллиардов ", "миллиард ", "миллиарда ")
n = n Mod 1000000000
p = p & Трехзначный(n \ 1000000, skl, 1, "миллионов ", "миллион ", "миллиона ")
n = n Mod 1000000
p = p & Трехзначный(n \ 1000, skl, 2, "тысяч ", "тысяча ", "тысячи ")
n = n Mod 1000
p = p & Трехзначный(n, Sklonenie, Rod, R5, R1, R2)
If n = 0 Then p = p & R5
If Number < 0 Then p = "минус " & p
If Number = 0 Then p = "ноль " & R5
Прописью = p
End Function
Function Трехзначный(Number As Long, Optional ByRef Sklonenie As Integer, _
Optional Rod As Integer = 1, Optional R5 As String = "", _
Optional R1 As String = "", Optional R2 As String = "") As String
' Записывает прописью трехзначное число с существительным
' Number - собственно число
' Sklonenie - переменная, в которую будет помещено склонение
' существительного (5 - "пять штук", 1 - "одна штука", 2 - "две штуки")
' Rod - род существительного (1 - муж. (по умолчанию), 2 - жен., 3 - ср.)
' R5 - существительное в форме "пять штук" (по умолчанию - "")
' R1 - существительное в форме "одна штука" (по умолчанию - "")
' R2 - существительное в форме "две штуки" (по умолчанию - "")
Dim p As String
Dim n As Long, d1 As Integer, d2 As Integer, d3 As Integer
n = Abs(Number)
d1 = n Mod 10
d2 = ((n - d1) / 10) Mod 10
d3 = ((n - 10 * d2 - d1) / 100) Mod 10
Sklonenie = 5
If d2 = 1 Then
Select Case d1
Case 0
p = "десять "
Case 1
p = "одиннадцать "
Case 2
p = "двенадцать "
Case 3
p = "тринадцать "
Case 4
p = "четырнадцать "
Case 5
p = "пятнадцать "
Case 6
p = "шестнадцать "
Case 7
p = "семнадцать "
Case 8
p = "восемнадцать "
Case 9
p = "девятнадцать "
End Select
Else
Select Case d2
Case 0
p = ""
Case 2
p = "двадцать "
Case 3
p = "тридцать "
Case 4
p = "сорок "
Case 5
p = "пятьдесят "
Case 6
p = "шестьдесят "
Case 7
p = "семьдесят "
Case 8
p = "восемьдесят "
Case 9
p = "девяносто "
End Select
Select Case d1
Case 0
p = p
Case 1
Select Case Rod
Case 2
p = p & "одна "
Case 3
p = p & "одно "
Case Else
p = p & "один "
End Select
Sklonenie = 1
Case 2
Select Case Rod
Case 2
p = p & "две "
Case 3
p = p & "два "
Case Else
p = p & "два "
End Select
Sklonenie = 2
Case 3
p = p & "три "
Sklonenie = 2
Case 4
p = p & "четыре "
Sklonenie = 2
Case 5
p = p & "пять "
Case 6
p = p & "шесть "
Case 7
p = p & "семь "
Case 8
p = p & "восемь "
Case 9
p = p & "девять "
End Select
End If
Select Case d3
Case 0
p = p
Case 1
p = "сто " & p
Case 2
p = "двести " & p
Case 3
p = "триста " & p
Case 4
p = "четыреста " & p
Case 5
p = "пятьсот " & p
Case 6
p = "шестьсот " & p
Case 7
p = "семьсот " & p
Case 8
p = "восемьсот " & p
Case 9
p = "девятьсот " & p
End Select
Select Case Sklonenie
Case 5
p = p & R5
Case 1
p = p & R1
Case 2
p = p & R2
End Select
If Number < 0 Then p = "минус " & p
If Number = 0 Then p = ""
Трехзначный = p
End Function
число прописью
Т.е. 100 -> сто.
Цитата:
Originally posted by stalwart
Подскажите где можно узнать алгоритм перевода числа в текст.
Т.е. 100 -> сто.
Подскажите где можно узнать алгоритм перевода числа в текст.
Т.е. 100 -> сто.
Вот, могу поделиться своей функцией:
Пример использования:
Прописью(123,1,"рублей","рубль","рубля") = "сто двадцать три рубля"
Код:
Что не понятно - спрашивай.
Цитата:
Originally posted by Cutty Sark
Что не понятно - спрашивай.
Что не понятно - спрашивай.
Спасибо
Цитата: Cutty Sark
Помогите пожалуйста с таким вопросом по поводу перевода числа в текст пример во вложении, не получается прописать (0,9 - ноль целых девять десятых процента)