Исходники и листинги ::: Delphi ::: функция перевода числа в словесное представление

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
  var
    skl:integer;
  ...
  function NumStr1(l2:integer;fl1:boolean):string;
  var ss2:string;
  begin
  NumStr1:='';
      Skl:= 2;
      Case l2 of
          100:NumStr1:= 'сто ';
          200:NumStr1:= 'двести ';
          300:NumStr1:= 'триста ';
          400:NumStr1:= 'четыреста ';
          500:NumStr1:= 'пятьсот ';
          600:NumStr1:= 'шестьсот ';
          700:NumStr1:= 'семьсот ';
          800:NumStr1:= 'восемьсот ';
          900:NumStr1:= 'девятьсот ';
          11:NumStr1:= 'одиннадцать ';
          12:NumStr1:= 'двенадцать ';
          13:NumStr1:= 'тринадцать ';
          14:NumStr1:= 'четырнадцать ';
          15:NumStr1:= 'пятнадцать ';
          16:NumStr1:= 'шестнадцать ';
          17:NumStr1:= 'семнадцать ';
          18:NumStr1:= 'восемнадцать ';
          19:NumStr1:= 'девятнадцать ';
          20:NumStr1:= 'двадцать ';
          30:NumStr1:= 'тридцать ';
          40:NumStr1:= 'сорок ';
          50:NumStr1:= 'пятьдесят ';
          60:NumStr1:= 'шестьдесят ';
          70:NumStr1:= 'семьдесят ';
          80:NumStr1:= 'восемьдесят ';
          90:NumStr1:= 'девяносто ';
          1:begin
              Skl:= 0;
              If fl1 Then
              begin
                  NumStr1:= 'один ';
              end
              Else
              begin
                  NumStr1:= 'одна ';
              end;
            end;
          2:begin
              Skl:= 1;
              If fl1 Then
              begin
                  NumStr1:= 'два ';
               end
              Else
              begin
                  NumStr1:= 'две ';
              end;
            end;
          3:begin
              Skl:= 1;
              NumStr1:= 'три ';
             end;
          4:begin
              Skl:= 1;
              NumStr1:= 'четыре ';
             end;
          5:NumStr1:= 'пять ';
          6:NumStr1:= 'шесть ';
          7:NumStr1:= 'семь ';
          8:NumStr1:= 'восемь ';
          9:NumStr1:= 'девять ';
          10:NumStr1:= 'десять ';
      end;
  end;
 
  function NumStr2(l1:longint;fl:boolean):string;
  var ss1:string;
  begin
      SS1:= '';
      If l1 >= 100 Then
          begin
          SS1:= NumStr1((trunc(l1 / 100) * 100), fl);
          l1:= l1 Mod 100;
          end;
      If l1 >= 20 Then
          begin
          SS1:= SS1+NumStr1((trunc(l1 / 10) * 10), fl);
          l1:= l1 Mod 10;
          end;
    NumStr2:= SS1+NumStr1(l1, fl);
  end;
 
  function numtoslov(l:longint):string;
  var l9:longint;
      s:string;
  begin
  l9:=l;
      S:= '';
  &nbsp;&nbsp;&nbsp;&nbsp;If l < 0 Then
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l:= Abs(l);
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:= 'минус ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp;&nbsp;&nbsp;If l > 1000000000 Then
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:= S+NumStr2(trunc(l / 1000000000), True);
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case Skl of
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:S:= S+'миллиард ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:S:= S+'миллиарда ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2:S:= S+'миллиардов ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l:= l Mod 1000000000;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp;&nbsp;&nbsp;If l > 1000000 Then
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:= S+NumStr2(trunc(l / 1000000), True);
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case Skl of
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:S:= S+'миллион ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:S:= S+'миллиона ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2:S:= S+'миллионов ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l:= l Mod 1000000;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp; If l > 1000 Then
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:= S+NumStr2(trunc(l / 1000), false);
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Case Skl of
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0:S:= S+'тысяча ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:S:= S+'тысячи ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2:S:= S+'тысяч ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l:= l Mod 1000;
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp;&nbsp;&nbsp;If l > 0 Then
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:= S+NumStr2(l, True);
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp;&nbsp;&nbsp;If S= '' Then
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;S:= 'ноль ';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp;&nbsp;&nbsp;if l9=1000 then S:='одна тысяча';
  &nbsp;&nbsp;&nbsp;&nbsp;numtoslov:= (copy(S, 1, 1)) + copy(S, 2, Length(S) - 1);
  end;
 
  function dzero(zz:string):string;
  begin
  if length(zz)=1 then zz:='0'+zz;
  dzero:=zz;
  end;
 
  function babkitostr(b:real):string;
  var babka,suba:string;
  &nbsp;&nbsp;&nbsp;&nbsp;i7:integer;
  &nbsp;&nbsp;&nbsp;&nbsp;i1,i,i8:integer;
  &nbsp;&nbsp;&nbsp;&nbsp;s1,s2:string;
  begin
  i1:=0;
  i:=trunc(b);
  if b<0 then i8:=trunc(-b) else i8:=trunc(b);
  s1:='рублей';
  if (i8 mod 100) <> 11 then
  &nbsp;&nbsp; begin
  &nbsp;&nbsp; case (i8 mod 10) of
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:s1:='рубль';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2,3,4:s1:='рубля';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp; end;
  i7:=round((i/100-round(i/100))*100);
  if (i7>=12)and(i7<=14) then s1:='рублей';
  if b<>round(b) then
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; suba:=Format('%10.2f',[b]);
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (copy(suba,length(suba)-2,1)=',')or(copy(suba,length(suba)-2,1)='.') then i1:=strtoint(copy(suba,length(suba)-1,2));
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (copy(suba,length(suba)-1,1)=',')or(copy(suba,length(suba)-1,1)='.') then i1:=strtoint(copy(suba,length(suba),1)+'0');
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end;
  s2:='копеек';
  if (i1 mod 100) <> 11 then
  &nbsp;&nbsp; begin
  &nbsp;&nbsp; case (i1 mod 10) of
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1:s2:='копейка';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2,3,4:s2:='копейки';
  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;
  &nbsp;&nbsp; end;
  babka:=numtoslov(round(i))+' '+s1+' '+dzero(inttostr(round(i1)))+' '+s2;
  babkitostr:=AnsiUpperCase(babka[1])+copy(babka,2,length(babka)-1);
  end;
  ...
 
  procedure TForm1.Button1Click(Sender: TObject);
  var ss:string;
  begin
  ...
  //вызов функции
  ss:=babkitostr(123.4);
  ...
  end;
<<< Предыдущая работа

Вернуться в галерею исходников
функция перевода числа в словесное представление
Автор: Chronos
Город: Томск
Дата: 10.05.2006  09:32
Комментариев: 2
Просмотров: 390
Оценка: 10 (2|2|2|2|2) [1]

Вернуться на главную