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

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

real прописью [D7, Win2k]


fedor ©   (2004-08-16 10:14:00) 

Существует ли такая функция, которая переводила число т.о.:
4123,45 - 'четыре тысячи сто двадцать три, сорок пять'?
Если нет, то не подскажите, как такую ф-ию можно написать?
Алгоритм какой-нить.


fedor   (2004-08-16 11:45:00) [1]

to 46_55_41_44 ©   (16.08.04 10:33) [5]

интересные у вас названия: манат, гяпик.
еще не склоняются.


fedor   (2004-08-16 11:22:00) [2]

Всем спасибо!


46_55_41_44   (2004-08-16 10:33:00) [3]

продолжение...
да кстати... сорри за то, что верхушка 2 раза пришла ))) просто не терпеливый я, как все кавказцы ))
           end;
     end;
     If S <> '' then myResult := S + myResult;

   end;
   S1 := Copy(IntToStr(Trunc(tut)), Length(IntToStr(Trunc(tut))), 1);
//    if Bool1 then
//      S2 := Query_.FieldByName('Admanat' + s1).AsString;
   S2 := 'манат';
   If Int(tut)= tut then
   begin
     if Bool1 then
       S3 := 'гяпик'
   end
   else
   begin
     S3 := 'гяпик';
   end;
   PointPos := Pos(decimalseparator, VarToStr(tut));

   If (PointPos <> 0) and (Copy(VarToStr(tut), PointPos + 1, 2) <> '') then
   If Length(Copy(VarToStr(tut), PointPos + 1, 2)) = 1 then
     myResult := myResult + ' ' + S2 + ' ' + Copy(VarToStr(tut), PointPos + 1, 2) + '0 ' + S3
   else
     myResult := myResult + ' ' + S2 + ' ' + Copy(VarToStr(tut), PointPos + 1, 2) + ' ' + S3;

   While myResult[1] = ' ' do myResult := Copy(myResult, 2, Length(myResult) - 1);
   myResult[1] := Chr(Ord(myResult[1]) - 32);

   if Int(tut) = tut then
     myResult := myResult + ' ' + S2 + ' 00 ' + S3;
   Result := myResult;
 end
 else if (Lang_Id = 'AzL') or (Lang_Id = 'AzC') or (Lang_Id = 'En') then
 begin
   str := '';
   coin := '';
   Manat := Trunc(tut);
   If (Pos(DecimalSeparator, VarToStr(tut)) <> Length(VarToStr(tut))) and
      (Pos(DecimalSeparator, VarToStr(tut)) <> 0) then
   begin
      S1 := VarToStr(tut);
      coin := copy(S1, Pos(DecimalSeparator, S1) + 1, Length(S1) - Pos(DecimalSeparator, S1));
      If length(coin) = 1 then coin := coin + '0';
   end;
   str := IntToStr(Manat);
   LenStr := Length(str);
   n := LenStr div 3;
   r := LenStr mod 3;
   aStr := '';
   if r = 0 then
   begin
     r := 3;
     n := n - 1;
   end;
   For i := n + 1 downto 1 do
   begin
     threeNum := StrToInt(copy(str, 1, r));
     sstr := DigitToWord3(threeNum);
     if (Lang_Id = 'AzL') or (Lang_Id = 'AzC')
     then
       Case i of
         1 : begin
               S1 := Copy(VarToStr(Manat), Length(VarToStr(Manat)), 1);
               if Bool1 then
                 S2 := 'манат';
               strp := S2;//'манат';
             end;
         2 : if sstr <> '' then
               strp := 'мин'
             else
               strp := '';

         3 : if sstr <> '' then
               strp := 'милйон'
             else
               strp := '';

         4 : if sstr <> '' then
               strp := 'милйард'
             else
               strp := '';

         5 : if sstr <> '' then
               strp := 'трилйон'
             else
               strp := '';
       end
     else
       Case i of
         1 : begin
               S1 := Copy(VarToStr(Manat), Length(VarToStr(Manat)), 1);
               if Bool1 then
                 S2 := 'манат';
               strp := S2;//'манат';
             end;

         2 : if sstr <> '' then
               strp := 'thousand'
             else
               strp := '';

         3 : if sstr <> '' then
               strp := 'million'
             else
               strp := '';

         4 : if sstr <> '' then
               strp := 'billion'
             else
               strp := '';

         5 : if sstr <> '' then
               strp := 'trillion'
             else
               strp := '';
       end;
     if sstr <> '' then
       astr := aStr + sstr + ' ' + strp + ' '
     else if strp = '' then
       astr := aStr + ' '
     else
       astr := aStr + strp + ' ';
     str := copy(str, r + 1, LenStr - r);
     r := 3;
     LenStr := Length(str);
   end;

   if coin <> '' then
   begin
     S1 := copy(coin, length(coin), 1);
     coin := coin + ' ' + 'гяпик';
   end;
   astr := astr + ' ' + coin;
   while aStr[1] = ' ' do
     astr := copy(astr, 2, Length(astr) - 1);

   i := ord(aStr[1]);
   aStr[1] := chr(i - 32);
   if Bool1 then
   begin
     if Int(tut) = tut then
       astr := astr + ' 00 ' + 'гяпик';
   end
   else
     if Int(tut) = tut then
       astr := astr;
   while pos('  ', astr) <> 0 do
     astr := ReplaceStr(astr, '  ', ' ');

   Result := astr;
 end;
end;


46_55_41_44   (2004-08-16 10:31:00) [4]

Это один пример!
Мне нужен был, чтобы переводить суммы в цифрах в пропись...
Да кстати так как я Бакинец, то валюта наша :)
Возьми и поменяй под свой случай... Работает!!! :)

function GetTextFromDig(tut : Double; Currensy_ : String) : String;
var
 Number,
 Three,
 coin,
 AStr,
 str,
 sstr,
 strp,
 S,
 S1,
 S2,
 S3,
 myResult           : String;
 RealNum            : Double;
 PointPos,
 i,
 Col,
 Len                : Integer;
 LenStr,
 threeNum,
 r,
 n,
 Manat              : int64;
 Bool1 : Boolean;
begin
 Result := '';
 Bool1 := Currensy_ <> '';
 if Copy(VarToStr(tut), length(VarToStr(tut)), 1) = DecimalSeparator then exit;

 If  Bool1 then

 if Lang_Id = 'Rs' then
 begin
   If tut = 0 then exit;
   RealNum := StrtoFloat(VarToStr(tut));
   Number := FloattoStr(Trunc(RealNum));
   Len := Length(Number);
   Col := 0;

   While Number > '' do
   begin
     Three := Copy(Number, Length(Number) - 2, 3);
     If Length(Three) < 3 then Three := '0' + Three;
     If Length(Three) < 3 then Three := '0' + Three;
     Number := Copy(Number, 1, Length(Number) - 3);
     Inc(Col);
     S := '';

     case StrtoInt(Three[1]) of
       1 : S := ' сто';
       2 : S := ' двести';
       3 : S := ' триста';
       4 : S := ' четыреста';
       5 : S := ' пятьсот';
       6 : S := ' шестьсот';
       7 : S := ' семьсот';
       8 : S := ' восемьсот';
       9 : S := ' девятьсот';
     end;

     case StrtoInt(Three[2]) of
       1 : Case StrtoInt(Three[3]) of
             0 : S := S + ' десять';
             1 : S := S + ' одиннадцать';
             2 : S := S + ' двенадцать';
             3 : S := S + ' тринадцать';
             4 : S := S + ' четырнадцать';
             5 : S := S + ' пятнадцать';
             6 : S := S + ' шестнадцать';
             7 : S := S + ' семнадцать';
             8 : S := S + ' восемнадцать';
             9 : S := S + ' девятнадцать';
           end;
       2 : S := S + ' двадцать';
       3 : S := S + ' тридцать';
       4 : S := S + ' сорок';
       5 : S := S + ' пятьдесят';
       6 : S := S + ' шестьдесят';
       7 : S := S + ' семьдесят';
       8 : S := S + ' восемьдесят';
       9 : S := S + ' девяносто';
     end;

     If Three[2] <> '1' then
     case StrtoInt(Three[3]) of
       1 : case Col of
             1, 3, 4 : S := S + ' один';
             2       : S := S + ' одна';
           end;
       2 : case Col of
             1, 3, 4 : S := S + ' два';
             2       : S := S + ' две';
           end;
       3 : S := S + ' три';
       4 : S := S + ' четыре';
       5 : S := S + ' пять';
       6 : S := S + ' шесть';
       7 : S := S + ' семь';
       8 : S := S + ' восемь';
       9 : S := S + ' девять';
     end;

     case Col of

       2 : If StrtoInt(Three[2]) = 1 then S := S + ' тысяч' else
           Case StrtoInt(Three[3]) of
             0              ://if Len in [5, 6, 7] then
                               if Three <> '000' then S := S + ' тысяч';
             1              : S := S + ' тысяча';
             2, 3, 4        : S := S + ' тысячи';
             5, 6, 7, 8, 9  : S := S + ' тысяч';
           end;

       3 : If StrtoInt(Three[2]) = 1 then S := S + ' миллионов' else
           Case StrtoInt(Three[3]) of
             0              ://if Len in [8, 9, 10] then
                               if Three <> '000' then S := S + ' миллионов';
             1              : S := S + ' миллион';
             2, 3, 4        : S := S + ' миллиона';
             5, 6, 7, 8, 9  : S := S + ' миллионов';
           end;
       4 : If StrtoInt(Three[2]) = 1 then S := S + ' миллиардов' else
           Case StrtoInt(Three[3]) of
             0                 : if Len > 10 then S := S + ' миллиардов';
             1                 : S := S + ' миллиард';
             2, 3, 4           : S := S + ' миллиарда';
             5, 6, 7, 8, 9     : S := S + ' миллиардов';

...
to be continued... не хватило места :)


46_55_41_44   (2004-08-16 10:31:00) [5]

Удалено модератором


Григорьев Антон   (2004-08-16 10:29:00) [6]

http://www.delphikingdom.com/asp/nets.asp?ItemID=431


Mim1   (2004-08-16 10:25:00) [7]

http://www.yandex.ru/yandsearch?text=%F1%F3%EC%EC%E0+%EF%F0%EE%EF%E8%F1%FC%FE+delphi+&stype=www&rpt=rad


Наверх

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