![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Оцените код $-)) [D6]
MikhailV © (2006-09-18 14:15:00)
//-----------------------------------------------------------------------------
function KRound(Source: Extended; Precision: Integer): Extended;
// 1. Исправлена ошибка округления отрицательных чисел
// 2. Повышена точность округления - раньше можно было
// округлять не более чем до 5-го знака (реально до 4-го),
// теперь - до 9-го
var StrNumber, StrDelta: string;
RoundPos, ErrCode: Integer;
CompValue, Delta, Sign: Extended;
begin
Str(Source:35:10, StrNumber); // 11.04.2003 увеличение точности
RoundPos:=Pos('.', StrNumber)+Precision;
{11.04.2003 определяем знак округляемого числа}
if (Pos('-', StrNumber) > 0) then
Sign := -1
else
Sign := 1;
{}
if Precision > 0 then RoundPos:=RoundPos-1;
if (Precision = 0) then
StrDelta:='.'+Copy('0000000000000000000000', 1, Precision)+ //22 нуля - mv
Copy(StrNumber, RoundPos+1, Length(StrNumber))
else
if (Precision > 0) then
StrDelta:='.'+Copy('0000000000000000000000', 1, Precision)+
Copy(StrNumber, RoundPos+2, Length(StrNumber))
else
if (Precision < 0) then
StrDelta:=Copy(StrNumber, RoundPos, Length(StrNumber));
Val(StrDelta, Delta, ErrCode);
CompValue:=1/(Power(10, Precision))/2;
{11.04.2003 "Дельта" должна иметь тот же знак, что и округляемое число}
if Delta < CompValue then
Result := Source - Delta*Sign
else
Result := Source - Delta*Sign + CompValue*2*Sign;
end;
MikhailV (2006-09-18 16:23:00) [1]> $10000...
Игорь Шевченко (2006-09-18 16:21:00) [2]
> Оцените код $
$-100
MikhailV (2006-09-18 15:56:00) [3]
> TUser © (18.09.06 15:40) [7]
> IncDay
Да было что-то вроде. Сходу только :
// Функция FindBirstDay ищет день рождения по возрасту на заданную дату
// Возвращает дату рождения.
// Параметры:
// 1) InCurDate - дата, на которую рассчитан возраст (в день рождения 0,0,0);
// 2) InYear - кол-во полных лет на InCurDate;
// 3) InMonth - кол-во полных месяцев на InCurDate;
// 4) InDay - кол-во полных дней на InCurDate.
sniknik (2006-09-18 15:45:00) [4]> Мы платим...
за каждый добавленный знак при повышении точности округления? круто.
TUser (2006-09-18 15:40:00) [5]IncDay
MikhailV (2006-09-18 15:21:00) [6]Мы платим...
MikhailV (2006-09-18 15:14:00) [7]Да, низковато, но радует ;)
Рамиль (2006-09-18 15:14:00) [8]А я думал мне платить будут за каждое использование этого кода.
Anatoly Podgoretsky (2006-09-18 15:09:00) [9]А я думал, ты цену хочешь узнать, а ты радостью делишься.
MikhailV (2006-09-18 15:07:00) [10]Увидел - обомлел, не мог не поделиться. Это коммерческий продукт!
Anatoly Podgoretsky (2006-09-18 14:56:00) [11]Ну оценил.