Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.033 c
3-79644
Dima
2004-01-31 21:51
2004.02.25
Пустые ADO DataSets


8-80038
Веталь
2003-10-06 13:35
2004.02.25
Как устроить быструю отрисовку прозрачных спрайтов?


1-79943
афвуд
2004-02-09 16:00
2004.02.25
Уникальный ключ.


1-79893
Furkan
2004-02-10 10:08
2004.02.25
Консоль и невизуальные компоненты


1-79821
TrogWar
2004-02-11 09:07
2004.02.25
Как создать заставку к проге?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский