Кстати, функции эти были уже в самых ранних версиях Паскаля. Так что мой совет — изучите Паскаль — полезно.
Hy, если yж дело идет к изyчению списка фyнкций :), то yпомянy еще Ceil и Floor. Unit Math;
Кстати, втоpая из них мне очень пpигодилась для полyчения экспоненты числа. Имеется в видy экспонента: X=1E 13 [001193]
Почему непpавильно pаботает функция StrToFloat?
Nomadicсоветует:
Пишу даже прямо StrToFloat('32.34'), к примеру, получаю исключение «'32.34' is not valid float». Если пишу число без десятичной точки, то все ОК. А какой у тебя DecimalSeparator? В Russian settings почему-то по умолчанию считается, что разделитеь дроби – запятая. Пеpеустанови пpи запуске пpогpаммы
DecimalSeparator := '.';
Или пользуйся этой функцией так:
StrToFloat('32,24');
Сергей AKA WildSeryприслал свой вариант:
Привожу мой вариант, написал для своего приложения за 20 минут. В силу специфики приложения не утруждал себя прописью полностью "рублей" и "копеек", а ограничился "руб." и "коп.", а также не было необходимости в знаке числа, по это все добавляется буквально 3-4 строками.
function currency2str (value: double): string;
consthundreds: array[0..9] of string= ('',' сто',' двести',' триста',' четыреста',' пятьсот',' шестьсот',' семьсот',' восемьсот',' девятьсот');
tens: array[0..9] of string= ('','',' двадцать',' тридцать',' сорок',' пятьдесят',' шестьдесят',' семьдесят',' восемьдесят',' девяносто');
ones: array[0..19] of string= ('','','',' три',' четыре',' пять',' шесть',' семь',' восемь',' девять',' десять',' одиннадцать',' двенадцать',' тринадцать',' четырнадцать',' пятнадцать',' шестнадцать',' семнадцать',' восемнадцать',' девятнадцать');
razryad: array[0..6] of string= ('',' тысяч',' миллион',' миллиард',' триллион',' квадриллион',' квинтиллион');
vars: string; i: integer; val: int64;
functionshortnum(s: string; raz: integer): string;
begin
Result:=hundreds[StrToInt(s[1])];
ifstrtoint(s)=0 thenexit;
ifs[2]<>'1' then begin
Result:=Result+tens[StrToInt(s[2])];
casestrtoint(s[3]) of
1: ifraz=1 thenresult:=result+' одна' elseresult:=result+' один';
2: ifraz=1 thenresult:=result+' две' elseresult:=result+' два';
elseresult:=result+ones[strtoint(s[3])];
end;
Result:=Result+razryad[raz];
casestrtoint(s[3]) of
0,5,6,7,8,9: ifraz>1 thenresult:=result+'ов';
1: ifraz=1 thenresult:=result+'а';
2,3,4: ifraz=1 thenresult:=result+'и' else ifraz>1 thenresult:=result+'а';
end;
end else begin
Result:=Result+ones[StrToInt(Copy(s,2,2))];
Result:=Result+razryad[raz];
ifraz>1 thenresult:=result+'ов';
end;
end;
begin
val:=Trunc(value);
ifval=0 then beginresult:='ноль'; exit; end;
s:=IntToStr(val); Result:=''; i:=0;
whilelength(s)>0 do begin
Result:=shortNum(Copy('00'+s,Length('00'+s)-2,3),i)+Result;
iflength(s)>3 thens:=copy(s,1,length(s)-3) elses:='';
inc(i);
end;
s:=IntToStr(Trunc((value-val)*100+0.5));
Result:=Result+' руб. '+s+' коп.';
end;
Добавление даты и времени в компонент Memo
{ Следующий код вставляет значение даты/времени в memo-поле. }
Var
s : string;
begin
s := DateToStr( Date ) + ' ' + TimeToStr( Time ) + ' :';
Memo1.Lines.Insert(0, s);
Memo1.SetFocus;
Memo1.SelStart := Length(s);
Memo1.SelLength := 0;
functioneaster (year: integer): tdatetime;
{----------------------------------------------------------------}
{ Вычисляет и возвращает день Пасхи определенного года. }
{ Идея принадлежит Mark Lussier, AppVision < MLussier@best.com>. }
{ Скорректировано для предотвращения переполнения целых, если по }
{ ошибке передан год с числом 6554 или более. }
{----------------------------------------------------------------}
var
nMonth, nDay, nMoon, nEpact, nSunday,
nGold, nCent, nCorx, nCorz: Integer;
begin
{ Номер Золотого Года в 19-летнем Metonic-цикле: }
nGold := (Year mod19) + 1;
{ Вычисляем столетие: }
nCent := (Year div100) + 1;
{ Количество лет, в течение которых отслеживаются високосные года… }
Читать дальше