Bankir.Ru
3 декабря, суббота 20:45

Объявление

Свернуть

Третья ежегодная конференция-консилиум «ИТ-бюджет банка - 2017»

Показать больше
Показать меньше

Как написать число прописью(процедура)

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • Как написать число прописью(процедура)

    Помогите написать или поделитесь процедурой написания чисел, а именно суммы прописью... это используется в платежных поручениях... Заранее благодарю! :-)))

  • #2
    Неужели Ваша АБС этого не делает ????
    --------------------
    С уважением,

    Комментарий


    • #3
      И на каком языке Вам это надо?
      Или в принципе?

      Комментарий


      • #4
        Ну надо человеку...
        Вот, из недр, для MS OFFICE очень хорошо подходит (к сожалению, фунция АТТАЧМЕНТА у меня не работает, поэтому прямым текстом):
        'Параметры: 1-сумма
        ' 2-вывод руб.коп.: 0-нет;1-сокращенно;2-полностью
        ' 3-копейки: 0-нет;1-есть;2-авто
        ' 4-текст в конце
        Public Function СуммаПрописью(ByVal Sm As Currency, Optional ByVal P_s As Variant = 2, Optional ByVal Cop As Variant = 2, Optional ByVal aft As Variant = "") As String
        On Error GoTo Err_СуммаПрописью


        'Андрей Федоров.Из конференции FIDO ru.msaccess

        Dim im As Integer, Smt As String, smti As String, Out As String
        Dim zt As Integer, z2 As Integer, z3 As Integer, I As Integer, J As Integer

        ' If IsMissing(aft) Then aft = ""
        ' If IsMissing(Cop) Then Cop = 2
        ' If IsMissing(P_s) Then P_s = 2 'by Lisa. Was 1

        Smt = Int(Sm): im = (Len(Smt) + 2) / 3: Smt = String$(im * 3 - Len(Smt), "0") & Smt
        For I = 1 To im
        smti = Mid$(Smt, 3 * I - 2, 3): z2 = Mid$(smti, 2, 1): z3 = Right$(smti, 1)
        For J = 1 To 3
        zt = Mid$(smti, J, 1)
        Select Case J
        Case 1
        Out = Out & Choose(zt, "сто ", "двести ", "триста ", "четыреста ", "пятьсот ", "шестьсот ", "семьсот ", "восемьсот ", "девятьсот ")
        Case 2
        If z2 = 1 Then
        Out = Out & Choose(z3 + 1, "десять ", "одиннадцать ", "двенадцать ", "тринадцать ", "четырнадцать ", "пятнадцать ", "шестнадцать ", "семнадцать ", "восемнадцать ", "девятнадцать ")
        Else
        Out = Out & Choose(zt, "десять ", "двадцать ", "тридцать ", "сорок ", "пятьдесят ", "шестьдесят ", "семьдесят ", "восемьдесят ", "девяносто ")
        End If
        Case 3
        If z2 > 1 Then
        Out = Out & Choose(zt, "од", "дв", "три ", "четыре ", "пять ", "шесть ", "семь ", "восемь ", "девять ")
        Select Case zt
        Case 1
        Out = Out & IIf(im - I = 1, "на ", "ин ")
        Case 2
        Out = Out & IIf(im - I = 1, "е ", "а ")
        End Select
        End If
        End Select
        Next
        Select Case im - I
        Case 1
        Out = Out & IIf(smti > 0, "тысяч" & IIf(z3 = 0 Or z3 > 4 Or z2 = 1, " ", IIf(z3 > 1 And z3 5, "и ", "а ")), "")
        Case 2, 3, 4
        Out = Out & IIf(smti > 0, Choose(im - 1 - I, "миллион", "миллиард", "триллион") & IIf(z3 = 0 Or z3 > 4 Or z2 = 1, "ов ", IIf(z3 > 1 And z3 5, "а ", " ")), "")
        End Select
        Next
        If Out = "" Then Out = "ноль "
        If P_s > 0 Then Out = Out & IIf(P_s = 1, "руб.", "рубл" & IIf(z3 = 0 Or z3 > 4 Or z2 = 1, "ей", IIf(z3 > 1 And z3 5, "я", "ь")))
        smti = Format$((Sm - Int(Sm)) * 100, "00")
        If (P_s > 0 And Cop = 1) Or (P_s > 0 And Cop = 2 And smti > "00") Then
        z2 = Left$(smti, 1): z3 = Right$(smti, 1)
        Out = Out & " " & smti & IIf(P_s = 1, " коп.", " копе" & IIf(z3 = 0 Or z3 > 4 Or z2 = 1, "ек", IIf(z3 > 1 And z3 5, "йки", "йка")))
        End If
        Mid$(Out, 1, 1) = UCase$(Left$(Out, 1))
        СуммаПрописью = Out & aft

        Exit_СуммаПрописью:
        Exit Function

        Err_СуммаПрописью:
        Call MsgBox(Err.Description)
        Resume Exit_СуммаПрописью

        End Function
        Вологодская область
        -------------------
        Лень - двигатель прогресса. Особенно в автоматизации...

        Комментарий


        • #5
          Gor001 Присоединяюсь к вопросу Lotus... На чём софте работаете??? Или - Вы вообще не из Банка? Так это и 1С умеет делать... Или - софт сами пишете???
          Да пребудет с Тобою Великая Сила! ©

          Комментарий


          • #6
            2 Furgon

            Ну надо человеку...

            Ну мало-ли, может ему еще валюта нужна и суммы произвольной размерности
            Вот и спрашиваем

            Комментарий


            • #7
              2 К_Маркелов

              Или - софт сами пишете???
              В этом случае уж сумму прописью он бы написал... Наверное

              Комментарий


              • #8
                нужно... очень нужно... и очень срочно :-(((

                Комментарий


                • #9
                  2 Gor001

                  Ежели не устраивает то что маэстро Furgon предоставил, то
                  опишите проблему народу поподробнее, а то рабочий день кончается
                  Лично я например уже почти ушел

                  Или Вы так прикалываетесь?

                  Комментарий


                  • #10
                    Мне нужна функция или процедура на С++ или Паскале

                    Комментарий


                    • #11
                      vsv В этом случае уж сумму прописью он бы написал Не уверен... Всякое бывает...
                      Или Вы так прикалываетесь? Вот-вот... ЧуХча не читатель, чуХча писатель...
                      Я бы и не стал переспрашивать, только постинг Furgonа раньше пришёл..., а я позже увидел...
                      Да пребудет с Тобою Великая Сила! ©

                      Комментарий


                      • #12
                        Gor001 функция или процедура на С++ или Паскале
                        Переписать Furgonа - как двумя пальцами об асфальт стукнуть... До вечера успеете...
                        Да пребудет с Тобою Великая Сила! ©

                        Комментарий


                        • #13
                          А МОЖЕТ У КОГО ГОТОВОЕ ЕСТЬ?

                          Комментарий


                          • #14
                            Нет, ну надо же! Вот это халявнические настроения! Уже и алгоритм дали, а написать никак...

                            Комментарий


                            • #15
                              SummProp(double Amount,AnsiString RUR, AnsiString COP) используется для нескольких валют. Заточена для Builder.
                              PHP код:
                              string _1_2[]  = {"одна ","две "};
                                
                              string _1_19 [] = {
                                                 
                              "один ",      "два ",
                                                 
                              "три ",       "четыре ",
                                                 
                              "пять ",      "шесть ",
                                                 
                              "семь ",      "восемь ",
                                                 
                              "девять ",    "десять ",
                                                 
                              "одиннадцать ","двенадцать ",
                                                 
                              "тринадцать ","четырнадцать ",
                                                 
                              "пятнадцать ","шестнадцать ",
                                                 
                              "семнадцать ","восемнадцать ",
                                                 
                              "девятнадцать "};
                               
                              string des[] = {
                                                 
                              "двадцать ",  "тридцать ",
                                                 
                              "сорок ",     "пятьдесят ",
                                                 
                              "шестьдесят ""семьдесят ",
                                                 
                              "восемьдесят ","девяносто "};
                               
                              string hang[] = {
                                                 
                              "сто ",       "двести ",
                                                 
                              "триста ",    "четыреста ",
                                                 
                              "пятьсот ",   "шестьсот ",
                                                 
                              "семьсот ",   "восемьсот ",
                                                 
                              "девятьсот "};
                                
                              string NameRub[] = {"рубль ","рубля ","рублей "};
                                
                              string NameSht[] = {"штука","штуки","штук"};
                                
                              string NameTho[] = {"тысяча ","тысячи ","тысяч "};
                                
                              string NameMil[] = {"миллион ","миллиона ","миллионов "};
                                
                              string NameMrd[] = {"миллиард ","миллиарда ","миллиардов"};
                              void Semantic(longistringwordsbytefem)
                              {
                                      
                              words="";
                                      if (
                              i>=100)
                                      {
                                              
                              words +=hang [i/100-1];
                                              
                              i%=100;
                                      }
                                      if (
                              i>19)
                                      {
                                              
                              words+=des[10-2];
                                              
                              i%=10;
                                      }
                                      if (
                              i!=0)
                                      if (
                              i3 && fem!=0)
                                              
                              words+=_1_2[i-1];
                                      else 
                              words+=_1_19[i-1];

                                      switch (
                              i)
                                      {
                                        case 
                              1fem=0;
                                        break;
                                        case 
                              2:case 3:case 4fem=1;
                                        break;
                                        default: 
                              fem=2;
                                        break;
                                      }
                              }
                              AnsiString SummProp(double Amount,AnsiString RURAnsiString COP)
                              {
                                      
                              AnsiString str="",str1="";
                                      
                              str SummProp((longAmount0).c_str();
                                      
                              str+= " "+RUR " ";
                                      
                              str1FloatToStr(floor((Amount-(long)(Amount))*100+0.5));
                                      if (
                              str1!="")
                                              
                              str+=str1 " "+COP;
                               return 
                              str;
                              }
                              string SummProp(long l,int flag)
                              {
                                      
                              string s="",s1="";
                                      
                              byte many=0;
                              if (
                              l>=1000000000)
                              {
                                 
                              Semantic(/1000000000,s1,many);
                                 
                              s+=NameMrd[many];
                                 
                              l%=1000000000;
                              }
                              if (
                              l>=1000000)
                              {
                                 
                              Semantic(/1000000,s1,many);
                                 
                              s+=s1NameMil[many];
                                 
                              l%=1000000;
                              }
                              if (
                              l>=1000)
                              {
                                 
                              many=1;
                                 
                              Semantic(/1000,s1,many);
                                 
                              s+=s1+NameTho[many];
                                 
                              l%=1000;
                              }
                              if (
                              l>=1)
                              {
                                 if (!
                              flag)
                                    
                              many=0;
                                 
                              Semantic(l,s1,many);
                                 
                              s1.erase(s1.length()-1,1);
                                 
                              /*
                                 if (!flag)
                                    s+=s1+ ") " + NameRub[many];
                                 else
                                    s+=s1+") " +NameSht[many];
                                    */
                                    
                              s+=s1;
                              }
                              s[0] =toup(s[0]);
                              return 
                              s;

                              Вставил теги
                              Последний раз редактировалось Romsan; 23.04.2002, 12:40.

                              Комментарий


                              • #16
                                "а мне пожалуста и дробную часть тоже словами, а еще чтобы валюту полностью и в правильном падеже печатала"

                                из требований заказчика

                                Комментарий


                                • #17
                                  2 ANT7
                                  Ну и что? В чем проблема?

                                  Комментарий


                                  • #18
                                    ANT7 "Можно и зайца научить курить. В принципе нет ничего невозможного... для человека... с интелектом" (С)

                                    Комментарий


                                    • #19
                                      Так проблемы нет. "Желание заказчика - закон" Сделали.
                                      Но эти желания все растут и растут. Иногда это достает, особенно, когда тебе говорят - "Да что здесь трудного?" и требуют сделать это за час.

                                      Комментарий


                                      • #20
                                        ANT7 А кто заказчик?
                                        И ваще эту тему уже обсуждали, про техзадания и постановщиков задач.

                                        Комментарий


                                        • #21
                                          Marky
                                          И ваще эту тему уже обсуждали, про техзадания и постановщиков задач.

                                          Да ради бога! Я замолкаю.

                                          Комментарий


                                          • #22
                                            ANT7 А чего Вы так обиделись?

                                            Комментарий

                                            Пользователи, просматривающие эту тему

                                            Свернуть

                                            Присутствует 1. Участников: 0, гостей: 1.

                                            Обработка...
                                            X