Главная страница
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.5 MB
Время: 0.085 c
15-1146201504
antonn
2006-04-28 09:18
2006.05.21
про локализацию, языки и вопросительные знаки...


3-1143974013
Alex Romanskiy
2006-04-02 14:33
2006.05.21
Out парметры в ХП MySQL


15-1146022327
Vitaliy
2006-04-26 07:32
2006.05.21
TTryIcon


2-1146942749
дямак
2006-05-06 23:12
2006.05.21
опять я ламерю(sorry)


1-1144571193
Undertaker_vav
2006-04-09 12:26
2006.05.21
возведение чисел в большие степени