Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Vadim Guchenko                       2:5020/400     13 Aug 2001  13:36:22
 To : All
 Subject : Re: сумма прописью
 -------------------------------------------------------------------------------- 
 
 "Pavel Oliynik" <Pavel.Oliynik@p37.f91.n4624.z2.fidonet.org> wrote in
 message news:997622495@p37.f91.n4624.z2.ftn...
 
 >   необходим сабж,
 >   а именно алгоритм, знаю что просто, но зачем нам "велосипеды",
 >   реализация безразлична, главное простота и коректная работа.
 
 Hа Delphi 6:
 
 function CurrToWords(Value: Currency): string;
 {Возвращает сумму Value, записанную словами}
 const
   OneTwoM: array[0..9] of string = ('','один ','два ','три ','четыре ','пять
 ','шесть ','семь ','восемь ','девять ');
   OneTwoF: array[0..9] of string = ('','одна ','две ','три ','четыре ','пять
 ','шесть ','семь ','восемь ','девять ');
   ElevenTwelve: array[0..9] of string = ('десять ','одиннадцать
 ','двенадцать ','тринадцать ','четырнадцать ','пятнадцать ','шестнадцать
 ','семнадцать ','восемнадцать ','девятнадцать ');
   TenTwenty: array[0..9] of string = ('','','двадцать ','тридцать ','сорок
 ','пятьдесят ','шестьдесят ','семьдесят ','восемьдесят ','девяносто ');
   Hundred: array[0..9] of string = ('','сто ','двести ','триста ','четыреста
 ','пятьсот ','шестьсот ','семьсот ','восемьсот ','девятьсот ');
 {+++++++++++++++++++++++++++++++++++++++++++}
 function CurrCategoryToWord(Value: Word; Unit1,Unit234,UnitOther: string;
 MaleGender: Boolean): string;
 {Возвращает трехзначное число Value, записанное словами. Unit1, Unit234 и
  UnitOther - единицы измерения после соответствующих цифр. MaleGender - род
  единицы измерения}
 var
   ResUnit: string;
 begin
 Result:='';
 if Value=0 then
   Exit;
 if ((Value mod 100) div 10)=1 then
   ResUnit:=UnitOther
 else
   case (Value mod 10) of
     1: ResUnit:=Unit1;
     2,3,4: ResUnit:=Unit234;
   else
     ResUnit:=UnitOther;
   end;
 
 Result:=Hundred[Value div 100];
 Value:=Value mod 100;
 if (Value div 10)=1 then
   Result:=Result+ElevenTwelve[Value mod 10]
 else
   begin
   Result:=Result+TenTwenty[Value div 10];
   if MaleGender then
     Result:=Result+OneTwoM[Value mod 10]
   else
     Result:=Result+OneTwoF[Value mod 10];
   end;
 
 Result:=Result+ResUnit+' ';
 end;
 {+++++++++++++++++++++++++++++++++++++++++++}
 var
   Num: Integer;
   St: string;
 begin
 Result:=IntToStrZ(trunc(Value*100) mod 100,2)+' ';
 if (Result[1])='1' then
   Result:=Result+'копеек'
 else
   case Result[2] of
     '1': Result:=Result+'копейка';
     '2','3','4': Result:=Result+'копейки';
   else
     Result:=Result+'копеек';
   end;
 
 Num:=trunc(Value);
 St:=CurrCategoryToWord(Num mod 1000,'рубль','рубля','рублей',true);
 if St='' then
   St:='рублей ';
 Result:=St+Result;
 Num:=Num div 1000;
 Result:=CurrCategoryToWord(Num mod
 1000,'тысяча','тысячи','тысяч',false)+Result;
 Num:=Num div 1000;
 Result:=CurrCategoryToWord(Num mod
 1000,'миллион','миллиона','миллионов',true)+Result;
 end;
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 сумма прописью   Pavel Oliynik   12 Aug 2001 13:19:00 
 Re: сумма прописью   Vadim Guchenko   13 Aug 2001 13:36:22 
Архивное /ru.algorithms/4421b095c423.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional