Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Вниз

сумма прописью   Найти похожие ветки 

 
nyron ©   (2006-04-25 17:09) [0]

добрый день. помогите пожалуйста. мне нужно чтобы сумма из edit 1 была в edit 2 пописью. нашел ссылку где описывается как это сделать, но вот не могу разобрать как правильно сделать. если кто знает подскажите пожалуйста как правильно написать


 
nyron ©   (2006-04-25 17:10) [1]

ссылка http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988619349&n=19


 
EvS ©   (2006-04-25 18:09) [2]

Чего подсказать-то?


 
Dmitrij_K   (2006-04-25 18:40) [3]

acedutils.narod.ru


 
nyron ©   (2006-04-25 23:44) [4]

как использовать код ,который указан в ссылке, чтобы у меня из edit1 числа 123 в edit2 были прописью т.е. (сто двадцать три) или какой код можно использовать для этого. в общем как правильно так сделать???


 
konrads   (2006-04-26 09:32) [5]

Скопируй функцию себе в программу вызови её покакому-нибудь событию (нпример Buttun1.Click)  Edit2.Text := ConvertToWord(StrToInt(Edit1.Text));

Если нужно получить болше чем трёхзначное число воспользуйся этой функцией:


function TForm1.IntToTxt(Int: String): String;
// Функция превода положительных целых чисел без дробей любой величины в прописной формат.
const EDIN : array [0..12] of String[6] =
     ("","один","два","три","четыре","пять","шесть","семь","восемь","девять","десять" ,"одна","две");
     OKON : array [1..2, 1..3] of String[2] = (("а","и",""),("","а","ов"));
     DES : array [0..19] of String[20] = ("","десять","двадцать","тридцать",
           "сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят", "девяносто",
           "","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать",
           "шестнадцать","семнадцать","восемнадцать","девятнадцать");
     SOT : array [0..9] of String[10] = ("","сто","двести","триста","четыреста",
           "пятьсот","шестьсот","семьсот","восемьсот","девятьсот");
var l,l1,l2,l3 : integer;
   f : boolean;
   s,s1 : string;
begin
 if int[1] = "0" then begin
   result := "Ноль";
//    result := "Ноль рублей";
   exit;
 end;
 f := true;
 s := "";
 l := length(Int);
{
 if Int[length(Int)-1] = "1" then s1 := "рублей" else
   case Int[length(Int)] of
     "1"      : s1 := "рубль";
     "2".."4" : s1 := "рубля";
     else  s1 := "рублей";
   end;
}
 while l > 0 do begin
   l := length(int);
   l3 := l mod 3;
   if l3 = 0 then l3 := 3;
   case l3 of
     1: if Int[1] <> "0" then f := true else f := false;
     2: if copy(Int,1,2) <> "00" then f := true else f := false;
     3: if copy(Int,1,3) <> "000" then f := true else f := false;
   end;
   while l3 > 0 do begin
     l := length(Int);
     l1 := l mod 3;
     l2 := StrToInt(Int[1]);
     if (l > 3) and (l < 7) and ((l2 = 1) or (l2 = 2)) and (l1 = 1) then l2 := l2 + 10;
     if (l1 = 2) and (l2 = 1) and (Int[2] <> "0") then begin
       l2 := 10 + StrToInt(Int[2]);
       Int := copy(Int,2,length(Int) - 1);
       dec(l3);
     end;
     case l1 of
       0: s := s + SOT[l2];
       1: s := s + EDIN[l2];
       2: s := s + DES[l2];
     end;
     if (l2 > 9) and (l1 = 2) then l2 := 5;
     if l2 > 9 then l2 := l2 - 10;
     case l2 of
       1   : l2 := 1;
       2..4: l2 := 2;
       else  l2 := 3;
     end;
     Dec(l3);
     Int := Copy(Int, 2, length(Int) - 1);
     s := s + " ";
   end;
   s := s + " ";
   if f then
// В этом CASE можно добавлять всякие квинтилионы до опупения
// но думаю врядли кому даже триллионы понадобятся
   case l of
     4..6: s := s + "тысяч" + OKON[1, l2];
     7..9: s := s + "миллион" + OKON[2, l2];
     10..12: s := s + "миллиард" + OKON[2, l2];
     13..15: s := s + "триллион" + OKON[2, l2];
   end;
   s := s + " ";
   l := length(int);
 end;
 result := s + s1;
{
// Это чтоб было красиво
// Уберём возможные двойные тройные пробелы между словами
 l1 := Length(result); l := 1;
 while l <> l1 do
   if (result[l] = " ") and (result[l + 1] = " ") then begin
     Delete(result, l, 1);
     l1 := Length(result);
   end else begin
     Inc(l);
   end;
}
{
// Первое слово с большой
 if Length(result) > 0 then result[1] := chr(ord(result[1])-32);
}  
end;



 
konrads   (2006-04-26 09:34) [6]

Всё закоментированное можно убрать если ненужно


 
konrads   (2006-04-28 09:33) [7]

Добавил мужской, женский и средний род


function TForm1.IntToTxt(Int: String; Rod: Integer): String;
// Функция превода положительных целых чисел без дробей любой величины в прописной формат.
// Параметр "Rod" = 1 - Мужской, 2 - женский, 3 - средний.

const EDIN : array [0..13] of String[6] =
    ("","один","два","три","четыре","пять","шесть","семь","восемь","девять","десять"  ,"одна","две","одно");
    OKON : array [1..2, 1..3] of String[2] = (("а","и",""),("","а","ов"));
    DES : array [0..19] of String[20] = ("","десять","двадцать","тридцать",
          "сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят", "девяносто",
          "","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать",
          "шестнадцать","семнадцать","восемнадцать","девятнадцать");
    SOT : array [0..9] of String[10] = ("","сто","двести","триста","четыреста",
          "пятьсот","шестьсот","семьсот","восемьсот","девятьсот");
var l,l1,l2,l3 : integer;
  f : boolean;
  s,s1 : string;
begin
if int[1] = "0" then begin
  result := "Ноль";
//    result := "Ноль рублей";
  exit;
end;
f := true;
s := "";
l := length(Int);
{
if Int[length(Int)-1] = "1" then s1 := "рублей" else
  case Int[length(Int)] of
    "1"      : s1 := "рубль";
    "2".."4" : s1 := "рубля";
    else  s1 := "рублей";
  end;
}
while l > 0 do begin
  l := length(int);
  l3 := l mod 3;
  if l3 = 0 then l3 := 3;
  case l3 of
    1: if Int[1] <> "0" then f := true else f := false;
    2: if copy(Int,1,2) <> "00" then f := true else f := false;
    3: if copy(Int,1,3) <> "000" then f := true else f := false;
  end;
  while l3 > 0 do begin
    l := length(Int);
    l1 := l mod 3;
    l2 := StrToInt(Int[1]);
    if (l > 3)   and (l < 7)  and ((l2 = 1) or (l2 = 2)) and (l1 = 1) then l2 := l2 + 10;
    if (l1 = 2)  and (l2 = 1) and (Int[2] <> "0") then begin
      l2 := 10 + StrToInt(Int[2]);
      Int := copy(Int,2,length(Int) - 1);
      dec(l3);
    end;
    if (Rod = 2) and ((l2 = 1) or (l2 = 2)) and (l = 1)  then l2 := l2 + 10;
    if (Rod = 3) and (l2 = 1) and (l = 1)  then l2 := l2 + 12;
    case l1 of
      0: s := s + SOT[l2];
      1: s := s + EDIN[l2];
      2: s := s + DES[l2];
    end;
    if (l2 > 9) and (l1 = 2) then l2 := 5;
    if l2 > 9 then l2 := l2 - 10;
    case l2 of
      1   : l2 := 1;
      2..4: l2 := 2;
      else  l2 := 3;
    end;
    Dec(l3);
    Int := Copy(Int, 2, length(Int) - 1);
    s := s + " ";
  end;
  s := s + " ";
  if f then
// В этом CASE можно добавлять всякие квинтилионы до опупения
// но думаю врядли кому даже триллионы понадобятся
  case l of
    4..6:   s := s + "тысяч"    + OKON[1, l2];
    7..9:   s := s + "миллион"  + OKON[2, l2];
    10..12: s := s + "миллиард" + OKON[2, l2];
    13..15: s := s + "триллион" + OKON[2, l2];
  end;
  s := s + " ";
  l := length(int);
end;
result := s + s1;
// Уберём возможные двойные тройные пробелы между словами
l1 := Length(result); l := 1;
while l <> l1 do
  if (result[l] = " ") and (result[l + 1] = " ") then begin
    Delete(result, l, 1);
    l1 := Length(result);
  end else begin
    Inc(l);
  end;
// Первое слово с большой
if Length(result) > 0 then result[1] := chr(ord(result[1])-32);
end;



 
Юрий Зотов ©   (2006-04-28 10:08) [8]

Таких функций в Сети - море, неужели сложно найти?

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

Результат поиска: страниц - 1556, сайтов - не менее 398.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.05.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1146842641
ANB
2006-05-05 19:24
2006.05.21
Как из OLE объекта вытащить имена его методов ?


15-1145011286
WondeRu
2006-04-14 14:41
2006.05.21
Linux. Аналог "Windows для начинающих"?


2-1146336167
имя
2006-04-29 22:42
2006.05.21
BILBASUMCIN IS BASC!


3-1143122033
anubis
2006-03-23 16:53
2006.05.21
SQL запрос


2-1147001597
Windows
2006-05-07 15:33
2006.05.21
Отследить нажатие кнопки





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский