powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Конвертатор сумму в сумму прописью
3 сообщений из 3, страница 1 из 1
Конвертатор сумму в сумму прописью
    #33078703
Akel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если есть у кого код конвертации суммы числовой в сумму прописью, дайте плиз. Желательно, чтоб склонял рубли(ей,я,ь и т.д.) и копееки тоже.
пример:
1343,23
одна тысяча триста сорок три рубля 23 копейки

Заранее, очень сильно благодарен.
...
Рейтинг: 0 / 0
Конвертатор сумму в сумму прописью
    #33078725
Akel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нашел=)))
Кому нано прикрепил=)))
...
Рейтинг: 0 / 0
Конвертатор сумму в сумму прописью
    #33080746
Новоселов Олег
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариантик (с разными валютами)

Код: 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.
FUNCTION CurToStr
PARAMETERS nSum, cTxt1 , cTxt2 , cTxt3 , nTypeWrite, cTxt1k , cTxt2k , cTxt3k
* nTypeWrite [= 1 -мужск.род т.е.рубль] / = 2 -женск.род т.е штука
*
* nSum -сумма
*
* cTxt1 , cTxt2 , cTxt3 - "рубль","рубля","рублей" ("доллар","доллара","долларов" 
* или "ЕВРО","ЕВРО","ЕВРО" и.т.д)
*
* cTxt1k , cTxt2k , cTxt3k - "копейка","копейки","копеек" ("цент","цента","центов" и.т.д)

IF TYPE("nSum")<>"N"
  nSum= 0 
ENDIF
DIMENSION aTxtMeasure( 3 )
IF TYPE("cTxt1")<>"C" OR TYPE("cTxt2")<>"C" OR TYPE("cTxt3")<>"C"
  aTxtMeasure( 1 )="рубль"
  aTxtMeasure( 2 )="рубля"
  aTxtMeasure( 3 )="рублей"
ELSE
  aTxtMeasure( 1 )=cTxt1
  aTxtMeasure( 2 )=cTxt2
  aTxtMeasure( 3 )=cTxt3
ENDIF
IF TYPE("nTypeWrite")<>"N"
  nTypeWrite= 1 
ENDIF

IF nSum= 0 
  RETURN "Ноль "+aTxtMeasure( 3 )
ENDIF

DIMENSION aTxtThousand( 3 ),aTxtMillion( 3 ),aTxtBillion( 3 ),aTxtTrillion( 3 )'
aTxtThousand( 1 )="тысяча"
aTxtThousand( 2 )="тысячи"
aTxtThousand( 3 )="тысяч"

aTxtMillion( 1 ) ="миллион"
aTxtMillion( 2 ) ="миллиона"
aTxtMillion( 3 ) ="миллионов"

aTxtBillion( 1 ) ="миллиард"
aTxtBillion( 2 ) ="миллиарда"
aTxtBillion( 3 ) ="миллиардов"

aTxtTrillion( 1 )="триллион"
aTxtTrillion( 2 )="триллиона"
aTxtTrillion( 3 )="триллионов"

*----------:
DIMENSION aTxtHundred( 10 ),aTxtTen( 10 ),aTxtExclude( 10 ),aTxtOne( 10 , 2 )
aTxtHundred(  1 )=""
aTxtHundred(  2 )="сто "
aTxtHundred(  3 )="двести "
aTxtHundred(  4 )="триста "
aTxtHundred(  5 )="четыреста "
aTxtHundred(  6 )="пятьсот "
aTxtHundred(  7 )="шестьсот "
aTxtHundred(  8 )="семьсот "
aTxtHundred(  9 )="восемьсот "
aTxtHundred( 10 )="девятьсот "

aTxtTen(  1 )=""
aTxtTen(  2 )=""
aTxtTen(  3 )="двадцать "
aTxtTen(  4 )="тридцать "
aTxtTen(  5 )="сорок "
aTxtTen(  6 )="пятьдесят "
aTxtTen(  7 )="шестьдесят "
aTxtTen(  8 )="семьдесят "
aTxtTen(  9 )="восемьдесят "
aTxtTen( 10 )="девяносто "

aTxtExclude(  1 )="десять"
aTxtExclude(  2 )="одиннадцать"
aTxtExclude(  3 )="двенадцать"
aTxtExclude(  4 )="тринадцать"
aTxtExclude(  5 )="четырнадцать"
aTxtExclude(  6 )="пятнадцать"
aTxtExclude(  7 )="шестнадцать"
aTxtExclude(  8 )="семнадцать"
aTxtExclude(  9 )="восемнадцать"
aTxtExclude( 10 )="девятнадцать"

aTxtOne(  1 , 1 )=""
aTxtOne(  2 , 1 )="один "
aTxtOne(  3 , 1 )="два "
aTxtOne(  4 , 1 )="три "
aTxtOne(  5 , 1 )="четыре "
aTxtOne(  6 , 1 )="пять "
aTxtOne(  7 , 1 )="шесть "
aTxtOne(  8 , 1 )="семь "
aTxtOne(  9 , 1 )="восемь "
aTxtOne( 10 , 1 )="девять "

aTxtOne(  1 , 2 )=""
aTxtOne(  2 , 2 )="одна "
aTxtOne(  3 , 2 )="две "
aTxtOne(  4 , 2 )="три "
aTxtOne(  5 , 2 )="четыре "
aTxtOne(  6 , 2 )="пять "
aTxtOne(  7 , 2 )="шесть "
aTxtOne(  8 , 2 )="семь "
aTxtOne(  9 , 2 )="восемь "
aTxtOne( 10 , 2 )="девять "

*----------:
cTextInWord=IIF(nSum< 0 ,"минус ","")
cSum=SUBSTR(STR(INT(nSum*IIF(nSum< 0 ,- 1 , 1 ))+ 1000000000000000 , 16 ), 2 , 15 )
FOR nPos= 0  TO  4 
  c3Char=SUBSTR(cSum,nPos* 3 + 1 , 3 )
  IF c3Char="000" AND nPos< 4 
    cTextInWord=cTextInWord+""
  ELSE
    c1stChar=SUBSTR(c3Char, 1 , 1 )
    c2ndChar=SUBSTR(c3Char, 2 , 1 )
    c3rdChar=SUBSTR(c3Char, 3 , 1 )

    cTextInWord=cTextInWord+aTxtHundred(VAL(c1stChar)+ 1 )
    IF c2ndChar="1"
      cTextInWord=cTextInWord+aTxtExclude(VAL(c3rdChar)+ 1 )+" "
    ELSE
      cTextInWord=cTextInWord+aTxtTen(VAL(c2ndChar)+ 1 )
      IF nPos= 4 
        cTextInWord=cTextInWord+aTxtOne(VAL(c3rdChar)+ 1 ,nTypeWrite)
      ELSE
        cTextInWord=cTextInWord+aTxtOne(VAL(c3rdChar)+ 1 ,IIF(nPos= 3 , 2 , 1 ))
      ENDIF
    ENDIF

    *определяем тип написания размерности(рубль,рубля,рублей):
    DO CASE
      CASE VAL(c2ndChar)= 1  AND VAL(c3rdChar)> 0  AND VAL(c3rdChar)< 5 
        nTypeAddition= 3 
      CASE VAL(c3rdChar)= 1 
        nTypeAddition= 1 
      CASE VAL(c3rdChar)> 1  AND VAL(c3rdChar)< 5 
        nTypeAddition= 2 
      OTHERWISE
        nTypeAddition= 3 
    ENDCASE

    DO CASE
      CASE nPos= 0 
        cTextInWord=cTextInWord+aTxtTrillion(nTypeAddition)+" "
      CASE nPos= 1 
        cTextInWord=cTextInWord+aTxtBillion(nTypeAddition)+" "
      CASE nPos= 2 
        cTextInWord=cTextInWord+aTxtMillion(nTypeAddition)+" "
      CASE nPos= 3 
        cTextInWord=cTextInWord+aTxtThousand(nTypeAddition)+" "
      CASE nPos= 4 
        cTextInWord=cTextInWord+aTxtMeasure(nTypeAddition)+" "
    ENDCASE

  ENDIF
NEXT
cTextInWord=UPPER(SUBSTR(cTextInWord, 1 , 1 ))+SUBSTR(cTextInWord, 2 )

IF TYPE("cTxt1k")<>"C" OR TYPE("cTxt2k")<>"C" OR TYPE("cTxt3k")<>"C"
  aTxtMeasure( 1 )="копейка"
  aTxtMeasure( 2 )="копейки"
  aTxtMeasure( 3 )="копеек"
ELSE
  aTxtMeasure( 1 )=cTxt1k
  aTxtMeasure( 2 )=cTxt2k
  aTxtMeasure( 3 )=cTxt3k
ENDIF

c1stChar=SUBSTR(STR(nSum*IIF(nSum< 0 ,- 1 , 1 ), 18 , 2 ), 17 , 1 )
c2ndChar=SUBSTR(STR(nSum*IIF(nSum< 0 ,- 1 , 1 ), 18 , 2 ), 18 , 2 )
DO CASE
  CASE VAL(c2ndChar)= 1 
    nTypeAddition= 1 
  CASE VAL(c2ndChar)> 1  AND VAL(c2ndChar)< 5 
    nTypeAddition= 2 
  OTHERWISE
    nTypeAddition= 3 
ENDCASE
cTextInWord=cTextInWord+c1stChar+c2ndChar+" "+aTxtMeasure(nTypeAddition)

RETURN cTextInWord
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Конвертатор сумму в сумму прописью
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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