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

Тема в разделе "Delphi - FAQ", создана пользователем Programmer_Hard, 12 фев 2007.

Наш партнер Genesis Hackspace
Статус темы:
Закрыта.
  1. Programmer_Hard

    Programmer_Hard Гость

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    1
  3. Programmer_Hard

    Programmer_Hard Гость

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

    CMEPTb Гость

    Код (Text):
    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;
     
  5. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.920
    Симпатии:
    1
  6. Баламут

    Баламут Well-Known Member

    Регистрация:
    27 июл 2005
    Сообщения:
    76
    Симпатии:
    0
    М-да... А я для этого свой компонент писал...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей