powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите
10 сообщений из 10, страница 1 из 1
Подскажите
    #32255965
Dimasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ подскажите как число преобразовать в число прописью
...
Рейтинг: 0 / 0
Подскажите
    #32255976
gek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
gek
Гость
http://www.delphimaster.ru/
...
Рейтинг: 0 / 0
Подскажите
    #32255984
1man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чигооо?
Как-нибудь по-другому вопрос сформулировать можно?
...
Рейтинг: 0 / 0
Подскажите
    #32256035
Dimasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в следующем, надо в отчете (Freereport) вывести сумму прописью
...
Рейтинг: 0 / 0
Подскажите
    #32256055
Фотография CrazyMihey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хе-хе, есть модуль собственнописанный. Поддерживает целые числа до Int64, мужской/женский род, русский/английский язык.
SymbolicNumbers.Pas:
Код: 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.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
Unit SymbolicNumbers;

                   INTERFACE
 Uses SysUtils ;

 Type
  TGender = ( gMale, gFemale ) ;
  TSymbols = Record
              Digits : Array[ 0 .. 9 , 0 .. 1 ] of String ;
              Dec1s : Array[ 0 .. 9 ] of String ;
              Decs : Array[ 0 .. 9 ] of String ;
              Huns : Array[ 0 .. 9 ] of String ;
              Thousands : Array[ 0 .. 2 ] of String ;
              Millions : Array[ 0 .. 2 ] of String ;
              Milliards : Array[ 0 .. 2 ] of String ;
              Trillions : Array[ 0 .. 2 ] of String ;
              CurrDivider : String ;
             End ;

 Const
  RussianStrings : TSymbols =
   (Digits :
     ( ( 'ноль', 'ноль' ),
       ( 'один', 'одна' ),
       ( 'два', 'две' ),
       ( 'три', 'три' ),
       ( 'четыре', 'четыре' ),
       ( 'пять', 'пять' ),
       ( 'шесть', 'шесть' ),
       ( 'семь', 'семь' ),
       ( 'восемь', 'восемь' ),
       ( 'девять', 'девять' )
     ) ;
    Dec1s :
     ( 'десять',
       'одиннадцать',
       'двенадцать',
       'тринадцать',
       'четырнадцать',
       'пятнадцать',
       'шестнадцать',
       'семнадцать',
       'восемнадцать',
       'девятнадцать' ) ;
    Decs :
     ( '',
       '',
       'двадцать',
       'тридцать',
       'сорок',
       'пятьдесят',
       'шестьдесят',
       'семьдесят',
       'восемьдесят',
       'девяносто' ) ;
    Huns :
     ( '',
       'сто',
       'двести',
       'триста',
       'четыреста',
       'пятьсот',
       'шестьсот',
       'семьсот',
       'восемьсот',
       'девятьсот' ) ;
    Thousands :
     ( 'тысяч',
       'тысяча',
       'тысячи' ) ;
    Millions :
     ( 'миллионов',
       'миллион',
       'миллиона' ) ;
    Milliards :
     ( 'миллиардов',
       'миллиард',
       'миллиарда' ) ;
    Trillions :
     ( 'триллионов',
       'триллион',
       'триллиона' ) ;
    CurrDivider :
     'и' ;
   ) ;
  EnglishStrings : TSymbols =
   (Digits :
     ( ( 'zero', 'zero' ),
       ( 'one', 'one' ),
       ( 'two', 'two' ),
       ( 'three', 'three' ),
       ( 'four', 'four' ),
       ( 'five', 'five' ),
       ( 'six', 'six' ),
       ( 'seven', 'seven' ),
       ( 'eight', 'eight' ),
       ( 'nine', 'nine' )
     ) ;
    Dec1s :
     ( 'ten',
       'eleven',
       'twelve',
       'thirteen',
       'fourteen',
       'fifteen',
       'sixteen',
       'seventeen',
       'eighteen',
       'nineteen' ) ;
    Decs :
     ( '',
       '',
       'twenty',
       'thirty',
       'fourty',
       'fifty',
       'sixty',
       'seventy',
       'eighty',
       'ninety' ) ;
    Huns :
     ( '',
       'one hundred',
       'two hundred',
       'three hundred',
       'four hundred',
       'five hundred',
       'six hundred',
       'seven hundred',
       'eight hundred',
       'nine hundred' ) ;
    Thousands :
     ( 'thousand',
       'thousand',
       'thousand' ) ;
    Millions :
     ( 'million',
       'million',
       'million' ) ;
    Milliards :
     ( 'milliard',
       'milliard',
       'milliard' ) ;
    Trillions :
     ( 'trillion',
       'trillion',
       'trillion' ) ;
    CurrDivider :
     'and' ;
   ) ;

 Var
  Gender : TGender = gMale ;
  Strings : TSymbols ;

 Function IntegerToText( N : Integer ) : String ; OverLoad ;
 Function IntegerToText( N : Int64 ) : String ; OverLoad ;
 Function CurrencyToText( N : Currency ) : String ;

                 IMPLEMENTATION

 Function Digit2String( S : String; G : TGender ) : String ;
  BEGIN           { Digit2String }
   Result := Strings.Digits[Ord( S[ 1 ] ) - Ord('0'), Ord( G )] ;
  END ;           { Digit2String }
 { --------------------------------------------------------------------------}
 

 Function Dec12String( C : Char ) : String ;
  BEGIN           { Digit12String }
   Result := Strings.Dec1s[Ord( C ) - Ord('0')] ;
  END ;           { Digit12String }
 { --------------------------------------------------------------------------}
 

 Function Dec2String( C : Char ) : String ;
  BEGIN           { Dec2String }
   Result := Strings.Decs[Ord( C ) - Ord('0')] ;
  END ;           { Dec2String }
 { --------------------------------------------------------------------------}
 

 Function Hun2String( C : Char ) : String ;
  BEGIN           { Hun2String }
   Result := Strings.Huns[Ord( C ) - Ord('0')] ;
  END ;           { Hun2String }
 { --------------------------------------------------------------------------}
 

 Function Triad( S : String; G : TGender ) : String ;
  Var
   R : String ;
  BEGIN             { Triad }
   Case Length( S ) of
      1  : Result := Digit2String( S, G ) ;
      2  : Case S[ 1 ] of
          '1' : Result := Dec12String( S[ 2 ] ) ;
          else Begin
                Result := Dec2String( S[ 1 ] ) ;
                IF S[ 2 ] <> '0'
                 then
                  IF Length( Result ) >  0 
                   then Result := Result + ' ' + Digit2String( S[ 2 ], G )
                   else Result := Digit2String( S[ 2 ], G )
                 else ;
               End ;
         End ;
      3  : Begin
          R := Hun2String( S[ 1 ] ) ;
          IF Length( R ) >  0 
           then Result := R + ' ' + Triad( Copy( S,  2 ,  2 ), G )
           else Result := Triad( Copy( S,  2 ,  2 ), G ) ;
         End ;
    else Result := ''
   End ; { Case }
  END ;             { Triad }
 { --------------------------------------------------------------------------}
 

 Function Ind( S : String ) : Byte ;
  Var
   L : Word ;
  BEGIN           { Ind }
   L := Length( S ) ;
   IF ( L =  1  ) or ( S[Pred( L )] <> '1' )
    then
     Case S[L] of
      '0'      : Result :=  0  ;
      '1'      : Result :=  1  ;
      '2'..'4' : Result :=  2  ;
      '5'..'9' : Result :=  0  ;
      else Result :=  0  ;
     End
    else Result :=  0  ;
  END ;           { Ind }
 { --------------------------------------------------------------------------}
 

 Function Sym2Text( S : String ) : String ;
  Var
   L      : Word ;
   Le, Ri : String ;
   R      : String ;
  BEGIN         { Sym2Text }
   Case Length( S ) of
           0  : Begin
               Result := '' ;
              End ;
        1 .. 3  : Begin
               Result := Triad( S, Gender ) ;
              End ;
        4 .. 6  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 3  ) ;
               Ri := Copy( S, Succ( L- 3  ),  3  ) ;
               R := Triad( Le, gFemale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Thousands[ Ind( Le ) ] + ' ' + Triad( Ri, Gender )
                else Result := Triad( Ri, Gender ) ;
              End ;
        7 .. 9  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 6  ) ;
               Ri := Copy( S, Succ( L- 6  ),  6  ) ;
               R := Triad( Le, gMale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Millions[ Ind( Le ) ] + ' ' + Sym2Text( Ri )
                else Result := Sym2Text( Ri ) ;
              End ;
      10 .. 12  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 9  ) ;
               Ri := Copy( S, Succ( L- 9  ),  9  ) ;
               R := Triad( Le, gMale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Milliards[ Ind( Le ) ] + ' ' + Sym2Text( Ri )
                else Result := Sym2Text( Ri ) ;
              End ;
      13 .. 15  : Begin
               L := Length( S ) ;
               Le := Copy( S,  1 , L- 12  ) ;
               Ri := Copy( S, Succ( L- 12  ),  12  ) ;
               R := Triad( Le, gMale ) ;
               IF Length( R ) >  0 
                then Result := R + ' ' + Strings.Trillions[ Ind( Le ) ] + ' ' + Sym2Text( Ri )
                else Result := Sym2Text( Ri ) ;
              End ;
     else Result := '' ;
   End ; { Case }
  END ;         { Sym2Text }
 { --------------------------------------------------------------------------}
 

 Function IntegerToText( N : Integer ) : String ;
  BEGIN         { IntegerToText }
   Result := Sym2Text( IntToStr( N ) ) ;
  END ;         { IntegerToText }
 { --------------------------------------------------------------------------}
 

 Function IntegerToText( N : Int64 ) : String ;
  BEGIN         { IntegerToText }
   Result := Sym2Text( IntToStr( N ) ) ;
  END ;         { IntegerToText }
 { --------------------------------------------------------------------------}
 

 Function CurrencyToText( N : Currency ) : String ;
  Var
   S : String ;
   i : Word ;
  BEGIN         { CurrencyToText }
   S := FormatCurr( '0.00', N ) ;
   i := Pos( ',', S ) ;
   Result := Sym2Text( Copy( S,  1 , i- 1  ) ) ;
   IF Length( Copy( S, i+ 1 ,  2  ) ) >  0 
    then Result := Result + ' ' + Strings.CurrDivider + ' ' + Copy( S, i+ 1 ,  2  ) + '/100'
    else ;
  END ;         { CurrencyToText }

END .


Перед использованием необходимо установить значение двух глобальных переменных этого модуля, к примеру, вот так:
Код: plaintext
1.
2.
  Gender := gMale ;
  Strings := RussianStrings ;

2 Moderator: Извиняюсь за длинное сообщение, Мыло у меня коряво работает...
...
Рейтинг: 0 / 0
Подскажите
    #32256088
Dimasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Офигеть спасибо шас попробую
...
Рейтинг: 0 / 0
Подскажите
    #32256110
Dimasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как бороться с кодировкой текста
...
Рейтинг: 0 / 0
Подскажите
    #32256115
Фотография CrazyMihey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не понял?
С этой страницы вставляешь в Delphi или в другой редактор в кодировке Windows-1251 .
...
Рейтинг: 0 / 0
Подскажите
    #32256124
Dimasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А все глюк большое спасибо
...
Рейтинг: 0 / 0
Подскажите
    #32256212
Dimasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как из отчета (freereport) вызвать фунцию или
в отчет передать переменную
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Подскажите
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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