Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

число прописью

2.4K
27 марта 2003 года
stalwart
11 / / 05.02.2003
Подскажите где можно узнать алгоритм перевода числа в текст.
Т.е. 100 -> сто.
267
27 марта 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by stalwart
Подскажите где можно узнать алгоритм перевода числа в текст.
Т.е. 100 -> сто.



Вот, могу поделиться своей функцией:
Пример использования:
Прописью(123,1,"рублей","рубль","рубля") = "сто двадцать три рубля"

Код:
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


Что не понятно - спрашивай.
2.4K
27 марта 2003 года
stalwart
11 / / 05.02.2003
Цитата:
Originally posted by Cutty Sark


Что не понятно - спрашивай.



Спасибо

32K
07 октября 2017 года
assei
24 / / 03.04.2013
Цитата: Cutty Sark
Цитата:
Originally posted by stalwart
Подскажите где можно узнать алгоритм перевода числа в текст.
Т.е. 100 -> сто.

Вот, могу поделиться своей функцией:
Пример использования:
Прописью(123,1,"рублей","рубль","рубля") = "сто двадцать три рубля"
[/code].

Помогите пожалуйста с таким вопросом по поводу перевода числа в текст пример во вложении, не получается прописать (0,9 - ноль целых девять десятых процента)

Прикрепленные файлы:
2 Кб
Загрузок: 614
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог