Форум: "Основная";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Внизстарый вопрос проокругление Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.126 c