Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преобразование из "число" в "число прописью" / 4 сообщений из 4, страница 1 из 1
31.08.2005, 10:30
    #33242693
Denissio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование из "число" в "число прописью"
Кто-нибудь знает как преобразовать число в строку на русском языке,
содержащую это число прописью? Например "555" преобразуем в "пятьсот
пятьдесят пять". Если у кого есть библиотечка или компонент, киньте
ссылочку, плиз.

Заранее спасибо!


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
31.08.2005, 14:34
    #33243586
aaaaaaaaa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование из "число" в "число прописью"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
#include <system.hpp>
#include <stdio.h>
#include <math.h>

void dt( AnsiString &str, int m1 , int m2, int m3, int flag )
{
    switch( m1 )
    {
        case  1 :
            str+="сто ";
            break;
        case  2 :
            str+="двести ";
            break;
        case  3 :
            str+="триста ";
            break;
        case  4 :
            str+="четыреста ";
            break;
        case  5 :
            str+="пятьсот ";
            break;
        case  6 :
            str+="шестьсот ";
            break;
        case  7 :
            str+="семьсот ";
            break;
        case  8 :
            str+="восемьсот ";
            break;
        case  9 :
            str+="девятьсот ";
            break;
    }
    if( m2 ==  0  || m2 >  1  )
    {
        if( m2 >  1  )
        {
            switch( m2 )
            {
                case  2 :
                    str+="двадцать ";
                    break;
                case  3 :
                    str+="тридцать ";
                    break;
                case  4 :
                    str+="сорок ";
                    break;
                case  5 :
                    str+="пятьдесят ";
                    break;
                case  6 :
                    str+="шестьдесят ";
                    break;
                case  7 :
                    str+="семьдесят ";
                    break;
                case  8 :
                    str+="восемьдесят ";
                    break;
                case  9 :
                    str+="девяносто ";
                    break;
            }
        }
        switch( m3 )
        {
            case  1 :
                if( flag ==  2  ) str+="одна ";
                else str+="один ";
                break;
            case  2 :
                if( flag ==  2  ) str+="две ";
                else str+="два ";
                break;
            case  3 :
                str+="три ";
                break;
            case  4 :
                str+="четыре ";
                break;
            case  5 :
                str+="пять ";
                break;
            case  6 :
                str+="шесть ";
                break;
            case  7 :
                str+="семь ";
                break;
            case  8 :
                str+="восемь ";
                break;
            case  9 :
                str+="девять ";
                break;
        }
    }
    else if( m2 ==  1  )
    {
        switch( m3 )
        {
            case  0 :
                str+="десять ";
                break;
            case  1 :
                str+="одиннадцать ";
                break;
            case  2 :
                str+="двенадцать ";
                break;
            case  3 :
                str+="тринадцать ";
                break;
            case  4 :
                str+="четырнадцать ";
                break;
            case  5 :
                str+="пятнадцать ";
                break;
            case  6 :
                str+="шестнадцать ";
                break;
            case  7 :
                str+="семнадцать ";
                break;
            case  8 :
                str+="восемнадцать ";
                break;
            case  9 :
                str+="девятнадцать ";
                break;
        }
    }
    if( flag ==  1  )
    {
        if( m3 ==  0  && m2 ==  0  && m1 ==  0  ) str+="";
        else if( m2 ==  1  )
        {
            str+="миллионов ";
        }
        else
        {
                if( m3 ==  1  ) str+="миллион ";
                else if( m3 >=  2  && m3 <=  4  ) str+="миллиона ";
                else str+="миллионов ";
        }
    }
    else if( flag ==  2  )
    {
        if( m3 ==  0  && m2 ==  0  && m1 ==  0  ) str+="";
        else if( m2 ==  1  )
        {
            str+="тысяч ";
        }
        else
        {
                if( m3 ==  1  ) str+="тысяча ";
                else if( m3 >=  2  && m3 <=  4  ) str+="тысячи ";
                else str+="тысяч ";
        }
    }
    else
    {
        if( m3 ==  0  && m2 ==  0  && m1 ==  0  ) str+="ноль рублей ";
        else if( m2 ==  1  )
        {
            str+="рублей ";
        }
        else
        {
                if( m3 ==  1  ) str+="рубль ";
                else if( m3 >=  2  && m3 <=  4  ) str+="рубля ";
                else str+="рублей ";
        }
    }
}

void MoneyToString( AnsiString &str, double money )
{
    int m1, m2, m3;
    int sum=money;
    unsigned char c;

    str="";

    m1=sum/ 100000000 ;
    m2=sum/ 10000000 -(sum/ 100000000 )* 10 ;
    m3=sum/ 1000000 -(sum/ 10000000 )* 10 ;
    dt( str, m1, m2, m3,  1  );

    m1=sum/ 100000 -(sum/ 1000000 )* 10 ;
    m2=sum/ 10000 -(sum/ 100000 )* 10 ;
    m3=sum/ 1000 -(sum/ 10000 )* 10 ;
    dt( str, m1, m2, m3,  2  );

    m1=sum/ 100 -(sum/ 1000 )* 10 ;
    m2=sum/ 10 -(sum/ 100 )* 10 ;
    m3=sum/ 1 -(sum/ 10 )* 10 ;
    dt( str, m1, m2, m3,  3  );

    c=str[ 1 ];
    c-= 32 ;
    str[ 1 ]=c;

    char buf[ 30 ];
    sprintf( buf, "%0.2f ", money );
    str=str+( strchr( buf, '.' )+ 1  )+" коп.";
}

Примерно так
...
Рейтинг: 0 / 0
31.08.2005, 15:07
    #33243694
Denissio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование из "число" в "число прописью"
Спасибо, попробую прикрутить.

Вот еще нашел http://vlak.webzone.ru/rus/projects/convnum.html
Правда не проверял еще.


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
05.09.2005, 23:58
    #33252807
Denissio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразование из "число" в "число прописью"
2aaaaaaaaaaa:

Спасибо за код! Прикрутил, вроде все нормально работает!


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Преобразование из "число" в "число прописью" / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]