Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

Почему непpавильно pаботает функция StrToFloat?

Nomadic советует:

Пишу даже прямо StrToFloat('32.34'), к примеру, получаю исключение «'32.34' is not valid float». Если пишу число без десятичной точки, то все ОК. А какой у тебя DecimalSeparator? В Russian settings почему-то по умолчанию считается, что разделитеь дроби – запятая. Пеpеустанови пpи запуске пpогpаммы

DecimalSeparator := '.';

Или пользуйся этой функцией так:

StrToFloat('32,24');

Число строкой X

Сергей AKA WildSery прислал

свой вариант:

Привожу мой вариант, написал для своего приложения за 20 минут. В силу специфики приложения не утруждал себя прописью полностью "рублей" и "копеек", а ограничился "руб." и "коп.", а также не было необходимости в знаке числа, по это все добавляется буквально 3-4 строками.

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;

 s:=IntToStr(Trunc((value-val)*100+0.5));

 Result:=Result+'
руб. '+s+' коп.';

end;

Даты

Добавление даты и времени в компонент Memo

Delphi 1

{ Следующий код вставляет значение даты/времени в memo-поле. }

Var

 s : string;

begin

 s := DateToStr( Date ) + ' ' + TimeToStr( Time ) + ' :';

 Memo1.Lines.Insert(0, s);

 Memo1.SetFocus;

 Memo1.SelStart := Length(s);

 Memo1.SelLength := 0;

Вычисление даты Пасхи II

Delphi 1

function easter (year: integer): tdatetime;

{----------------------------------------------------------------}

{ Вычисляет и возвращает день Пасхи определенного года. }

{ Идея принадлежит Mark Lussier, AppVision <MLussier@best.com>. }

{ Скорректировано для предотвращения переполнения целых, если по }

{ ошибке передан год с числом 6554 или более. }

{----------------------------------------------------------------}

var

 nMonth, nDay, nMoon, nEpact, nSunday,

 nGold, nCent, nCorx, nCorz: Integer;

Поделиться с друзьями: