|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/4421b095c423.html, оценка из 5, голосов 10
|