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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2009, 07:55   #1
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию Сумма прописью, есть ли такой компонент?

Привет всем. Подскажите пожалуйста, есть ли такой компонент, с помощью которого сумма писалась бы прописью.
В инете находил примеры, но что-то я не могу с ними разобраться, хотелось бы узнать, есть ли компонент?
Заранее спасибо.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 01.12.2009, 08:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну там совсем не сложно.
Я вот предлагал начало:
http://www.programmersforum.ru/showt...dyn#post382094

На DelphiWorld есть пример до 9999999 прописью...
А компонента такого я никогда не встречал. Оно луче самому написать - не так уж и сложно )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2009, 11:18   #3
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Stilet, спасибо конечно, но ссылку вы мне дали бессмысленную, во-первых, там про VB речь идет, а тот пост который Вы оставили, мягко говоря - фигня, максимум до 99 и то с ошибками пишет.
Водку мы пьем для запаха - а дури нам своей хватает!
Vit@L вне форума Ответить с цитированием
Старый 01.12.2009, 11:31   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

о-па... бессмысленную... ну вы и горазды харчами перебирать
там весь алгоритм расписан или вам сэр подать готовый исходник? а в DelphiWorld видимо тоже не заглядывали?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 01.12.2009, 11:32   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, не надо хамить!!! Вам никто ничего не обязан. Вам помогают, а Вы в ответ хамите... (


Ладно. пользуйтесь мой добротой. Вот решение:
Код:
function currency2Str (value: double): string;
const hundreds: array [0..9] of string = ('',' сто',' двести',' триста',' четыреста',' пятьсот',' шестьсот',' семьсот',' восемьсот',' девятьсот');

tens: array [0..9] of string = ('','',' двадцать',' тридцать',' сорок',' пятьдесят',' шестьдесят',' семьдесят',' восемьдесят',' девяносто');
ones: array [0..19] of string = ('','','',' три',' четыре',' пять',' шесть',' семь',' восемь',' девять',' десять',' одиннадцать',' двенадцать',
' тринадцать',' четырнадцать',' пятнадцать',' шестнадцать',' семнадцать',' восемнадцать',' девятнадцать');
razryad: array [0..6] of string = ('',' тысяч',' миллион',' миллиард',' триллион',' квадриллион',' квинтиллион');

var s: string; i: integer; val: int64;


function shortNum(s: string; raz: integer): string;
begin
  Result:=hundreds[StrToInt(s[1])]; if StrToInt(s)=0 then Exit;
  if s[2]<>'1' then begin
    Result:=Result+tens[StrToInt(s[2])];
    case StrToInt(s[3]) of
      1: if raz=1 then Result:=Result+' одна' else Result:=Result+' один';
      2: if raz=1 then Result:=Result+' две' else Result:=Result+' два';
    else Result:=Result+ones[StrToInt(s[3])];
  end;
  Result:=Result+razryad[raz];
  case StrToInt(s[3]) of
    0,5,6,7,8,9: if raz>1 then Result:=Result+'ов';
    1: if raz=1 then Result:=Result+'а';
    2,3,4: if raz=1 then Result:=Result+'и' else if raz>1 then Result:=Result+'а';
  end;
  end else begin
    Result:=Result+ones[StrToInt(Copy(s,2,2))];
    Result:=Result+razryad[raz];
    if raz>1 then Result:=Result+'ов';
  end;
end;

begin
  val:=Trunc(value);
  if val=0 then begin Result:='ноль'; Exit; end;
  s:=IntToStr(val); Result:=''; i:=0;
  while Length(s)>0 do begin
    Result:=shortNum(Copy('00'+s,Length('00'+s)-2,3),i)+Result;
    if Length(s)>3 then s:=Copy(s,1,Length(s)-3) else s:='';
    inc(i);
  end;
  Result := Trim(Result)
end;
для проверки киньте Button1, Edit1 и Label1
в на клик кнопки код:
Код:
Label1.Caption := currency2Str( StrToFloat(edit1.Text) );
p.s. копирайт на код не мой. откуда-то выдрал. откуда, сорри, уже не помню...

Последний раз редактировалось Serge_Bliznykov; 01.12.2009 в 11:41.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2009, 12:18   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Vit@L
Древние мудрецы говаривали - "Лишь тот слепой кто видеть не желает. лишь тот увидит кто посмотрит вглубь".
P.S. за точность перевода не ручаюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2009, 12:38   #7
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Так, ну во-первых. Я не хамил - это раз. Я вправе высказать свое мнение по поводу ссылки. Но если уж кого и обидел, то извиняюсь, честное слово, не хотел.
raxp, Вы совершенно правы, я именно этого и хочу, чтобы мне дали готовый исходник. Я поэтому и обозвал тему, не алгоритм, а компонент, если Вы еще не заметили. Готовых примеров полно в инете.
В DelphiWorld я не заглядывал.

Serge_Bliznykov, еще раз повторюсь, что я не хамил, а за то, что разрешили попользоваться вашей добротой - спасибо большое. Сейчас попробую.

Serge_Bliznykov, большое спасибо за ваш пример, вот еще несколько вопросов:
1. как сделать чтобы первое числительное писалось с большой буквы
2. Как сделать чтобы писалась так же дробная часть числа дробные числа
3. Необходимо сделать чтобы после целой части писалось слово рубли(рублей/рубля), а после дробной (коп.)

Stilet, какие замечательные люди эти древние мудрецы.
Водку мы пьем для запаха - а дури нам своей хватает!

Последний раз редактировалось Stilet; 01.12.2009 в 13:04.
Vit@L вне форума Ответить с цитированием
Старый 01.12.2009, 13:07   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Как сделать чтобы писалась так же дробная часть числа дробные числа
Это сложнее, обычно число переводят в строку, и применяют два отдельных алгорится к тому что перед и после запятой.
Цитата:
чтобы после целой части писалось слово рубли
Сократи до руб. - это уменьшит тебе проблем.
Цитата:
как сделать чтобы первое числительное писалось с большой буквы
Ну дык AnsiUpperCase для первого символа еще никто не отменял.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.12.2009, 13:10   #9
Vit@L
Форумчанин
 
Аватар для Vit@L
 
Регистрация: 24.06.2009
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Сократи до руб. - это уменьшит тебе проблем.
Ничего не понял, причем тут сокращение??? мне не столь важно что там написать, мне важно как это сделать.

Всем большое спасибо. Этот пример http://delphiworld.narod.ru/base/sum_written_out9.html
Полностью удовлетворил мои потребности.
Водку мы пьем для запаха - а дури нам своей хватает!

Последний раз редактировалось Stilet; 01.12.2009 в 13:17.
Vit@L вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли такой компонент? artemavd Компоненты Delphi 6 11.05.2009 01:47
Сумма прописью 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
Сумма прописью Fainder Microsoft Office Excel 6 17.03.2007 10:43