Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.21;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1146922436
ДЯМАК
2006-05-06 17:33
2006.05.21
Дана матрица


4-1141048917
Arazel
2006-02-27 17:01
2006.05.21
Запретить регистрвцию процесса в системе


3-1143109479
yaral
2006-03-23 13:24
2006.05.21
Время выполнения запроса


2-1146953092
TBlur
2006-05-07 02:04
2006.05.21
Нет ли у кого функции, чтобы сделать Blur?


2-1146732129
RDS
2006-05-04 12:42
2006.05.21
Hook





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский