Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.25;
Скачать: CL | DM;

Вниз

старый вопрос проокругление   Найти похожие ветки 

 
denis24   (2004-02-12 19:00) [0]

Как округлить 2,635 до 2,64?


 
clickmaker ©   (2004-02-12 19:07) [1]

round(2.635 * 100) / 100


 
heady   (2004-02-12 19:09) [2]

function RoundEx(X: Double; Precision: Integer ): Double;
{
Precision :
1 - до целых
10 - до десятых
100 - до сотых
...
}
var
ScaledFractPart, Temp: Double;
begin
ScaledFractPart := Frac(X) * Precision;
Temp := Frac(ScaledFractPart);
ScaledFractPart := Int(ScaledFractPart);
if Temp >= 0.5 then
ScaledFractPart := ScaledFractPart + 1;
if Temp <= -0.5 then
ScaledFractPart := ScaledFractPart - 1;
RoundEx := Int(X) + ScaledFractPart / Precision;
end;

(с) DelphiWorld


 
denis24   (2004-02-12 19:20) [3]

так то оно так,но на разных машинах или 2,63(на 98 винде) а пробую у себя 2,64(в2к).Это как?


 
heady   (2004-02-12 19:33) [4]

попробуй такой вариант:
function RoundStr(Zn: Real; kol_zn: Integer): Real;
var
snl, s, s0, s1, s2: string;
n, n1: Real;
nn, i: Integer;
begin
s := FloatToStr(Zn);
if (Pos(",", s) > 0) and (Zn > 0) and
(Length(Copy(s, Pos(",", s) + 1, length(s))) > kol_zn) then
begin
s0 := Copy(s, 1, Pos(",", s) + kol_zn - 1);
s1 := Copy(s, 1, Pos(",", s) + kol_zn + 2);
s2 := Copy(s1, Pos(",", s1) + kol_zn, Length(s1));
n := StrToInt(s2) / 100;
nn := Round(n);
if nn >= 10 then
begin
snl := "0,";
for i := 1 to kol_zn - 1 do
snl := snl + "0";
snl := snl + "1";
n1 := StrToFloat(Copy(s, 1, Pos(",", s) + kol_zn)) + StrToFloat(snl);
s := FloatToStr(n1);
if Pos(",", s) > 0 then
s1 := Copy(s, 1, Pos(",", s) + kol_zn);
end
else
s1 := s0 + IntToStr(nn);
if s1[Length(s1)] = "," then
s1 := s1 + "0";
Result := StrToFloat(s1);
end
else
Result := Zn;
end;

(c) delphiWorld


 
Anatoly Podgoretsky ©   (2004-02-12 19:41) [5]

denis24 (12.02.04 19:20) [3]
Это значит, что у тебя не ровно 2,635, а 2,6349999999 или 2,6350000001


 
Defunct   (2004-02-12 19:55) [6]

а зачем округлять число?

может достаточно округлять результат выводимый на экран?
Format("%F3.2",[2.635]);


 
Anatoly Podgoretsky ©   (2004-02-12 20:00) [7]

На w2k получит 2,63 на w9x 2,64, какая разница, у него стопроцентно число чуть меньше 2,635


 
Stilgar ©   (2004-02-12 20:00) [8]

Какие алгоритмы... :) RoundTo - округлит до четного числа, SimpleRoundTo - до большего, что и требовалось:
2.64=SimpleRoundTo(2.635, -2);
P.S. Модуль Math.


 
Defunct   (2004-02-12 20:07) [9]

Anatoly Podgoretsky © (12.02.04 20:00) [7]

Const Delta = 0.0001;

Format("%F3.2",[2.635+ Delta]);


 
denis24   (2004-02-13 09:29) [10]

2,635- это число получаемое потем умножения 0,5*5,37=2,635.
По идее это 2,64.
Так вот попробовал heady (12.02.04 19:09) [2]
Но там например temp =0.5
Идет проверка условия
if temp>=0.5 ...........
Но при пошаговом просмотре это условие не выполняется и соответственно проскакивает .Почему?



Страницы: 1 вся ветка

Текущий архив: 2004.02.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.082 c
1-79743
Romba
2004-02-12 10:33
2004.02.25
XPmenu глючит если быстро водить мышкой


1-79747
Незнающий
2004-02-12 10:25
2004.02.25
Множества


14-80151
Soft
2004-02-01 17:11
2004.02.25
Черствеем мы, спасите наши души.


1-79721
Denisoid
2004-02-12 16:59
2004.02.25
Вопрос по работе с ShellListView !!!


4-80368
emergenter
2003-12-16 21:32
2004.02.25
API: LocalAlloc