Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
ВнизОкругление Найти похожие ветки
← →
k_len (2003-12-19 11:04) [0]Есть 2 вещест числа
y1,MaxY:real;
y1 вычисляется,округляется ф-цией РаудТо получаем 2873,229
MaxY-берется из файла и тоже равно 2873,229
но условие y1=MaxY =ложь
как быть? подскажите
← →
TUser (2003-12-19 11:07) [1]Наверное ты пишешь RoundTo(...), но параметр y от этого не меняется. Надо y:=roundto(...). И ваще - код напиши.
← →
Sandman25 (2003-12-19 11:10) [2]>как быть? подскажите
Сравнение вещественных чисел - дело неблагодарное.
Сравнивайте так:
const
epsilon = 1e-5;
if abs(Y-MaxY) <= epsilon then
← →
k_len (2003-12-19 11:13) [3]сорри надо так
y1 вычисляется,округляется ф-цией РаудТо получаем 2873,229
MaxY-берется из файла и тоже равно 2873,229
условие y1<=MaxY =ложь
← →
Ega23 (2003-12-19 11:15) [4]
>
> const
> epsilon = 1e-5;
>
> if abs(Y-MaxY) <= epsilon then
Хороший способ. Или привести к целым, сравнить и т.д.
← →
Sandman25 (2003-12-19 11:17) [5][3] k_len © (19.12.03 11:13)
Как Вы узнаете, что значения переменных именно 2873,229?
На самом деле там может быть и 2873,228999997, и 2873,22900005
← →
k_len (2003-12-19 11:22) [6]MaxY-берется из файла (=2873,229)
y1 в окне отладки, его же округляют, или я чего-то не понимаю
← →
Sandman25 (2003-12-19 11:32) [7]Запустите это:
procedure TForm1.Button1Click(Sender: TObject);
var
y, maxy: double;
begin
y := 2873.22900;
maxy := strtofloat("2873,229");
y := roundto(y, -3);
if y <= maxy then
showmessage("yes")
else
begin
showmessage("no");
showmessage(floattostr(y));
showmessage(floattostr(maxy));
showmessage(floattostrf(y, ffExponent, 18, 10));
showmessage(floattostrf(maxy, ffExponent, 18, 10));
end;
end;
← →
k_len (2003-12-19 11:37) [8]>>Sandman25 © (19.12.03 11:32) [7]
идея понятна, это можно как-то обойти?
← →
Ega23 (2003-12-19 11:41) [9]Умножь оба числа на 10 в степени n, где n - кол-во знаков после запятой (в твоём случае n=3), потом прогони их через Trunc и сравни. А потом снова на 1000 раздели.
← →
k_len (2003-12-19 11:49) [10]спасибо
← →
Семен Сорокин (2003-12-19 11:57) [11]если кол-во знаков после запятой ограничено тремя можно использовать currency
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.032 c