Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2012, 15:28   #1
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию Сумма Прописью

Здравствуйте, понимаю что в Гугле полно инфы про это, но не нашел исходника по этой теме, есть куча вариантов в DelphiWorld но у меня не получается корректно вставить в код моей проги, Подскажите или скиньте плиз исходники ?
ins813 вне форума Ответить с цитированием
Старый 04.10.2012, 16:31   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Если речь о деньгах, то я использую этот модуль:
Код:
unit FullSum;

 

interface

 

uses SysUtils;

 

{

Функция перевода суммы, записанной цифрами в сумму прописью :

например, 23.12 -> двадцать три рубля 12 копеек.

переводит до 999999999 руб. 99 коп.

Функция не отслеживает, правильное ли значение получено в параметре Number

(т.е. положительное и округленное с точностью до сотых) - эту проверку

необходимо провести до вызова функции.

}

 

//----------------- Copyright (c) 1999 by Константин Егоров

//----------------- mailto: egor@vladi.elektra.ru

 

function SumNumToFull(Number: real): string;

 

implementation

 

function SumNumToFull(Number:real):string;

var

PartNum, TruncNum, NumTMP, D: integer;

NumStr : string;

i, R : byte;

Flag11 : boolean;

begin

D:=1000000;

R:=4;

//выделяем рубли

TruncNum:=Trunc(Number);

if TruncNum<>0 then

   repeat

     PartNum:=TruncNum div D;

     Dec(R);

     D:=D div 1000;

   until

     PartNum<>0

else

   R:=0;

 

// перевод рублей

for i:=R downto 1 do

begin

   Flag11:=False;

   // выделение цифры сотен

   NumTMP:=PartNum div 100;

   case NumTMP of

     1: NumStr:=NumStr+'сто ';

     2: NumStr:=NumStr+'двести ';

     3: NumStr:=NumStr+'триста ';

     4: NumStr:=NumStr+'четыреста ';

     5: NumStr:=NumStr+'пятьсот ';

     6: NumStr:=NumStr+'шестьсот ';

     7: NumStr:=NumStr+'семьсот ';

     8: NumStr:=NumStr+'восемьсот ';

     9: NumStr:=NumStr+'девятьсот ';

   end;

   // выделение цифры десятков

   NumTMP:=(PartNum mod 100) div 10;

   case NumTMP of

     1:

     begin

       NumTMP:=PartNum mod 100;

       case NumTMP of

         10: NumStr:=NumStr+'десять ';

         11: NumStr:=NumStr+'одиннадцать ';

         12: NumStr:=NumStr+'двенадцать ';

         13: NumStr:=NumStr+'тринадцать ';

         14: NumStr:=NumStr+'четырнадцать ';

         15: NumStr:=NumStr+'пятнадцать ';

         16: NumStr:=NumStr+'шестнадцать ';

         17: NumStr:=NumStr+'семнадцать ';

         18: NumStr:=NumStr+'восемнадцать ';

         19: NumStr:=NumStr+'девятнадцать ';

       end;

       case i of

         3: NumStr:=NumStr+'миллионов ';

         2: NumStr:=NumStr+'тысяч ';

         1: NumStr:=NumStr+'рублей ';

       end;

       Flag11:=True;

     end;

     2: NumStr:=NumStr+'двадцать ';

     3: NumStr:=NumStr+'тридцать ';

     4: NumStr:=NumStr+'сорок ';

     5: NumStr:=NumStr+'пятьдесят ';

     6: NumStr:=NumStr+'шестьдесят ';

     7: NumStr:=NumStr+'семьдесят ';

     8: NumStr:=NumStr+'восемьдесят ';

     9: NumStr:=NumStr+'девяносто ';

   end;

   // выделение цифры единиц

   NumTMP:=PartNum mod 10;

   if not Flag11 then

   begin

     case NumTMP of

       1:

         if i=2 then

           NumStr:=NumStr+'одна '

         else

           NumStr:=NumStr+'один ';

       2:

         if i=2 then

           NumStr:=NumStr+'две '

         else

           NumStr:=NumStr+'два ';

       3: NumStr:=NumStr+'три ';

       4: NumStr:=NumStr+'четыре ';

       5: NumStr:=NumStr+'пять ';

       6: NumStr:=NumStr+'шесть ';

       7: NumStr:=NumStr+'семь ';

       8: NumStr:=NumStr+'восемь ';

       9: NumStr:=NumStr+'девять ';

     end;

     case i of

       3:

         case NumTMP of

           1: NumStr:=NumStr+'миллион ';

           2,3,4: NumStr:=NumStr+'миллиона ';

           else

             NumStr:=NumStr+'миллионов ';

         end;

       2:

         case NumTMP of

           1 : NumStr:=NumStr+'тысяча ';

           2,3,4: NumStr:=NumStr+'тысячи ';

           else

             if PartNum<>0 then

               NumStr:=NumStr+'тысяч ';

         end;

       1:

         case NumTMP of

           1 : NumStr:=NumStr+'рубль ';

           2,3,4: NumStr:=NumStr+'рубля ';

           else

             NumStr:=NumStr+'рублей ';

         end;

     end;

   end;

   if i>1 then

   begin

     PartNum:=(TruncNum mod (D*1000)) div D;

     D:=D div 1000;

   end;

end;

 

//перевод копеек

PartNum:=Round(Frac(Number)*100);

if PartNum=0 then

begin

   SumNumToFull:=NumStr+'00 копеек';

   Exit;

end;

// выделение цифры десятков

NumTMP:=PartNum div 10;

if NumTMP=0 then

   NumStr:=NumStr+'0'+IntToStr(PartNum)+' '

else

   NumStr:=NumStr+IntToStr(PartNum)+' ';

// выделение цифры единиц

NumTMP:=PartNum mod 10;

case NumTMP of

   1:

     if PartNum<>11 then

       NumStr:=NumStr+'копейка'

     else

       NumStr:=NumStr+'копеек';

   2,3,4:

     if (PartNum<5) or (PartNum>14) then

       NumStr:=NumStr+'копейки'

     else

       NumStr:=NumStr+'копеек';

   else

     NumStr:=NumStr+'копеек';

end;

SumNumToFull:=NumStr;

end;

 

end.
FaTaL вне форума Ответить с цитированием
Старый 04.10.2012, 17:06   #3
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию

ок, я его скопировал и создал Юнит под него, прицепил его к своей проге в Uses, а вот как дальше действовать ? допустим в edit1 я вбиваю число... а далше где что прописать ?
ins813 вне форума Ответить с цитированием
Старый 04.10.2012, 17:45   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Используй функцию function SumNumToFull(Number: real): string;
FaTaL вне форума Ответить с цитированием
Старый 04.10.2012, 17:56   #5
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию

А куда ее вставить, просто никогда с этим не сталкивался, в смысле с хранимыми проц и фун-ями
ins813 вне форума Ответить с цитированием
Старый 04.10.2012, 20:58   #6
_SERGEYX_
Участник клуба
 
Аватар для _SERGEYX_
 
Регистрация: 07.07.2007
Сообщений: 1,518
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:='123456,25';
  ShowMessage(SumNumToFull(StrToFloat(Edit1.Text)));
end;
В самой функции можно заменить последнюю строку на
Код:
  SumNumToFull := AnsiUpperCase(Copy(NumStr, 1, 1)) +
  Copy(NumStr, 2, Length(NumStr));

Последний раз редактировалось _SERGEYX_; 04.10.2012 в 21:10.
_SERGEYX_ вне форума Ответить с цитированием
Старый 04.10.2012, 21:47   #7
ins813
Форумчанин
 
Регистрация: 18.05.2012
Сообщений: 111
По умолчанию

Спасибо, попробую
ins813 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма прописью ranif Общие вопросы Delphi 1 11.10.2011 14:24
Сумма Прописью olegwolf Microsoft Office Excel 4 11.05.2010 11:45
Сумма прописью Averess Microsoft Office Excel 1 13.02.2009 11:13
Сумма прописью LX Da Mad Microsoft Office Excel 5 27.06.2008 01:54
Сумма прописью в 1С Aleksandr Свободное общение 2 27.08.2007 15:59