Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Ivan1 ©   (2004-11-18 21:44:00) 

когда то я давно в инете встречал такую лабуду как перевод чисел в числа словами
типа например 527 - "пятсот двадцать семь"

могет кто-то видел где?


Digitman   (2004-11-19 17:24:00) [1]


> встречал такую лабуду


> могет кто-то видел где?


встреча с лабудойсостоялась, возрадуйся.
факт отрадный.

однако гораздо печальней тот факт, что чью-то "лабуду", наверняка "заточенную" под конкретное применение, ты пытаешься присобачить к собственной логике.


Anatoly Podgoretsky   (2004-11-19 17:23:00) [2]

Bel ©   (19.11.04 15:32) [11]
Нет я прав, привожу технические требования автора
числа словами типа например 527 - " пятсотдвадцать семь"


Кириешки   (2004-11-19 17:18:00) [3]

пятый
пять
пятьдесят
пятьсот
пятью


Bel   (2004-11-19 15:32:00) [4]

> Anatoly Podgoretsky ©   (19.11.04 12:17) [10]
> И в обоих слово пятсот неправильно написано

Анатолий, Вы не правы!


Anatoly Podgoretsky   (2004-11-19 12:17:00) [5]

И в обоих слово пятсот неправильно написано


Amoeba   (2004-11-19 11:44:00) [6]

Преобразование денежной суммы в пропись
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=805


Amoeba   (2004-11-19 11:43:00) [7]

Компонент для предоставления чисел прописью
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=1028


Кириешки   (2004-11-19 11:38:00) [8]

Ega23 ©   (19.11.04 11:37) [6]

А у меня слов больше. :))


Ega23   (2004-11-19 11:37:00) [9]

2 Кириешки ©   (19.11.04 11:35) [5]

У меня короче.  :о)


Кириешки   (2004-11-19 11:35:00) [10]

У меня тоже есть. Нашел где-то. Пишешь в едите цифры, а лейбл показовает их в виде слов.

function ShortNum(num: word; razr:
integer): string;
const
 hundreds: array [0..9] of string = ('', '
сто', ' двести', ' триста',
   ' четыреста', ' пятьсот', '
шестьсот', ' семьсот', ' восемьсот',
   ' девятьсот');
 tens: array [0..9] of string = ('', '', '
двадцать', ' тридцать',
   ' сорок', ' пятьдесят', '
шестьдесят', ' семьдесят', '
восемьдесят',
   ' девяносто');
 ones: array [3..19] of string = (' три', '
четыре', ' пять', ' шесть',
   ' семь', ' восемь', ' девять', '
десять', ' одиннадцать',
   ' двенадцать', ' тринадцать', '
четырнадцать', ' пятнадцать',
   ' шестнадцать', ' семнадцать', '
восемнадцать', ' девятнадцать');
 razryad: array [0..6] of string = ('', '
тысяч', ' миллион', ' миллиард',
   ' триллион', ' квадриллион', '
квинтиллион');

var
 t: byte; // десятки
 o: byte; // единицы
begin
 result := hundreds[num div 100];
 if num mod 100 = 0 then Exit;
 t := (num mod 100) div 10;
 o := num mod 10;
 if t <> 1 then begin
   result := result + tens[t];
   case o of
     1: if razr = 1
       then result := result + ' одна'
       else result := result + ' один';
     2: if razr = 1
       then result := result + ' две'
       else result := result + ' два';
     3..9: result := result + ones[o];
   end;
   result := result + razryad[razr];
   case o of
     1: if razr = 1 then result := result +
'а';
     2..4: if razr = 1
       then result := result + 'и'
       else if razr > 1 then result :=
result + 'а';
     else if razr > 1 then result := result
+ 'ов';
   end;
 end else begin
   result := result + ones[num mod
100];
   result := result + razryad[razr];
   if razr > 1 then result := result + 'ов';
 end;
end;

function IntToWords(s: string): string;
var
 i, count: integer;
begin
 if Length(s) <= 0 then begin
   result := 'ноль';
   Exit;
 end;
 count := (Length(s) + 2) div 3;
 if count > 7 then begin
   result := 'Value is too large';
   Exit;
 end;
 result := '';
 s := '00' + s;
 for i := 1 to count do
   result := ShortNum(StrToInt(copy(s,
Length(s) - 3 * i + 1, 3)), i - 1) + result;
 if Length(result) > 0 then
delete(result, 1, 1);  
end;

procedure
TForm1.Button1Click(Sender:
TObject);
begin
label1.caption :=
IntToWords(Edit1.Text);
end;


Ega23   (2004-11-19 11:31:00) [11]


const

   HN:array['0'..'9'] of string[10]=
          ('','сто ','двести ','триста ','четыреста ','пятьсот ',
            'шестьсот ','семьсот ','восемьсот ','девятьсот ');
     DC:array['0'..'9'] of string[13]=
          ('десять ','одиннадцать ','двенадцать ','тринадцать ',
            'четырнадцать ','пятнадцать ','шестнадцать ','семнадцать ',
            'восемнадцать ','девятнадцать ');
    KC:array['0'..'9'] of string[12]=
           ('','десять ','двадцать ','тридцать ','сорок ','пятьдест ',
            'шестьдесят ','семьдесят ','восемьдесят ','девяносто ');
     RM:array['0'..'9',boolean] of string[7]=
        (('',''),('один ','одна '),('два ','две '),('три ','три '),
           ('четыре ','четыре '),('пять ','пять '),('шесть ','шесть '),
           ('семь ','семь '),('восемь ','восемь '),('девять ','девять '));
     RM2:array['0'..'9'] of byte=
            (0,1,2,2,2,0,0,0,0,0);
     GR:array[1..5,0..2] of string[11]=
           (('','',''),
           ('тысяч ','тысяча ','тысячи '),
           ('миллионов ','миллион ','миллиона '),
           ('миллиардов ','миллиард ','миллиарда '),
           ('триллионов ','триллион ','триллиона '));

function NumToStr(D:extended; Female:boolean):ShortString;
var S,R:ShortString;
j,k:integer;
begin
R:='';
IF (D<0)then begin R:='Возврат '; D:=D*(-1); end;
 Str(int(D):20:0,S);
S:=Trim(S);
  while length
(S) mod 3 > 0 do S:='0'+S;
for j:=length(S) div 3 downto 1 do
   begin
    k:=length(S)-3*j+1;
    if (S[k]='0') and (S[k+1]='0') and (S[k+2]='0') then continue;
    if S[k+1]='1' then R:=R+HN[S[k]]+DC[S[k+2]]+GR[j,0]
    else R:=R+HN[S[k]]+KC[S[k+1]]+RM[S[k+2],(j=2) or ((j=1) and Female)]+
            GR[j,RM2[S[k+2]]];
   end;
{дл перевода в win-кодировку}
  R[1]:=ANSIUpperCase(R[1])[1];
NumToStr:=R;
// WordCount(
end;



Вроде должно хватить.


Amoeba   (2004-11-19 11:26:00) [12]

Кажется на "Королевстве Дельфи" был готовый модуль.


Мастер   (2004-11-18 21:51:00) [13]

http://delphibase.endimus.ru/


begin...end   (2004-11-18 21:48:00) [14]

Нигде не видел, попробуйте сами написать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо