перевод числа в слова

  • Автор темы Programmer_Hard
  • Дата начала
Статус
Закрыто для дальнейших ответов.
P

Programmer_Hard

Здравствуйте.
у кого есть исходник функции перевода числа (вроде 2304) в слова (две тысячи триста четыре) ?
 
E

European

Точно помню, что видел в Delphi Russian Knowledge Base from Vit.
Качать здесь -
 
P

Programmer_Hard

большое спасибо!
Сэкономил временя и силы
 
C

CMEPTb

Код:
type

TTroyka = array[1..3] of Byte;
TMyString = array[1..19] of string[12];

function MoneyToStr(DD: string): string;
var
S, OutS, S2,VC: string;
k, L, kk: Integer;
Troyka: TTroyka;
V1: TMyString;
Mb: Byte;
const
V11: TMyString =
('îäèí', 'äâà', 'òðè', '÷åòûðå', 'ïÿòü', 'øåñòü', 'ñåìü', 'âîñåìü', 'äåâÿòü',
'äåñÿòü', 'îäèííàäöàòü',
'äâåíàäöàòü', 'òðèíàäöàòü', '÷åòûðíàäöàòü', 'ïÿòíàäöàòü', 'øåñòíàäöàòü',
'ñåìíàäöàòü', 'âîñåìíàäöàòü', 'äåâÿòíàäöàòü');
V2: array[1..8] of string =
('äâàäöàòü', 'òðèäöàòü', 'ñîðîê', 'ïÿòüäåñÿò', 'øåñòüäåñÿò', 'ñåìüäåñÿò',
'âîñåìüäåñÿò', 'äåâÿíîñòî');
V3: array[1..9] of string =
('ñòî', 'äâåñòè', 'òðèñòà', '÷åòûðåñòà', 'ïÿòüñîò', 'øåñòüñîò', 'ñåìüñîò',
'âîñåìüñîò', 'äåâÿòüñîò');
M1: array[1..13, 1..3] of string = (('òûñÿ÷à', 'òûñÿ÷è', 'òûñÿ÷'),
('ìèëëèîí', 'ìèëëèîíà', 'ìèëëèîíîâ'),
('ìèëëèàðä', 'ìèëëèàðäà', 'ìèëëèàðäîâ'),
('òðèëëèîí', 'òðèëëèîíà', 'òðèëëèîíîâ'),
('êâàäðèëëèîí', 'êâàäðèëëèîíà', 'êâàäðèëëèîíîâ'),
('êâèíòèëëèîí', 'êâèíòèëëèîíà', 'êâèíòèëëèîíîâ'),
('ñåêñòèëëèîí', 'ñåêñòèëëèîíà', 'ñåêñòèëëèîíîâ'),
('ñåíòèëëèîí', 'ñåíòèëëèîíà', 'ñåíòèëëèîíîâ'),
('îêòèëëèîí', 'îêòèëëèîíà', 'îêòèëëèîíîâ'),
('íîíèëëèîí', 'íîíèëëèîíà', 'íîíèëëèîíîâ'),
('äåöèëëèîí', 'äåöèëëèîíà', 'äåöèëëèîíîâ'),
('óíäåöèëëèîí', 'óíäåöèëëèîíà', 'óíäåöèëëèîíîâ'),
('äîäåöèëëèîí', 'äîäåöèëëèîíà', 'äîäåöèëëèîíîâ'));
R1: array[1..3] of string = ('ðóáëü', 'ðóáëÿ', 'ðóáëåé');
R2: array[1..3] of string = ('êîïåéêà', 'êîïåéêè', 'êîïååê');
function TroykaToStr(L: ShortInt; TR: TTroyka): string;
var
S: string;
begin
S := '';
if Abs(L) = 1 then
begin
V1[1] := 'îäíà';
V1[2] := 'äâå';
end
else
begin
V1[1] := 'îäèí';
V1[2] := 'äâà';
end;
if Troyka[2] = 1 then
begin
Troyka[2] := 0;
Troyka[3] := 10 + Troyka[3];
end;
if Troyka[3] <> 0 then
S := V1[Troyka[3]];
if Troyka[2] <> 0 then
S := V2[Troyka[2] - 1] + ' ' + S;
if Troyka[1] <> 0 then
S := V3[Troyka[1]] + ' ' + S;
if (L > 0) and (S <> '') then
case Troyka[3] of
1: S := S + ' ' + M1[L, 1] + ' ';
2..4: S := S + ' ' + M1[L, 2] + ' ';
else
S := S + ' ' + M1[L, 3] + ' ';
end;
TroykaToStr := S;
end;
begin
V1 := V11;
L := 0;
OutS := '';
kk := Pos(',', DD);
if kk = 0 then
S := DD
else
S := Copy(DD, 1, kk - 1);
if S = '0' then
S2 := ''
else
S2 := S;
repeat
for k := 3 downto 1 do
if Length(S) > 0 then
begin
Troyka[k] := StrToInt(S[Length(S)]);
Delete(S, Length(S), 1);
end
else
Troyka[k] := 0;
OutS := TroykaToStr(L, Troyka) + OutS;
if L = 0 then
Mb := Troyka[3];
Inc(L);
until Length(S) = 0;
case Mb of
0: if Length(S2) > 0 then
OutS := OutS + ' ' + R1[3] + ' ';
1: OutS := OutS + ' ' + R1[1] + ' ';
2..4: OutS := OutS + ' ' + R1[2] + ' ';
else
OutS := OutS + ' ' + R1[3] + ' ';
end;
S2 := '';
if kk <> 0 then
begin
DD := Copy(DD, kk + 1, 2);
if Length(DD) = 1 then
DD := DD + '0';
k := StrToInt(DD);
Troyka[1] := 0;
Troyka[2] := k div 10;
Troyka[3] := k mod 10;
S2 := TroykaToStr(-1, Troyka);
case Troyka[3] of
0: if Troyka[2] = 0 then
S := ''
else
S := R2[3];
1: S := R2[1];
2..4: S := R2[2];
else
S := R2[3];
end;
end;
if OutS <> '' then OutS[1] := AnsiUpperCase(OutS[1])[1];
if K <> 0 then
Result:=OutS+IntToStr(k)+' '+S Else
Result:=OutS+'00 êîïååê';// åñëè êîïåéêè íóæíû öèôðîé-ýòó ñòðîêó ðàñêîìåíòèðîâàòü
// MoneyToStr := OutS + S2 + ' ' + S; // à ýòó çàêîìåíòèðîâàòü
end;
 
Б

Баламут

М-да... А я для этого свой компонент писал...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!