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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.04 c
4-12209
Duncann
2003-11-04 11:37
2004.01.05
не получается послать сообщение другому приложению.


14-12032
Думкин
2003-12-14 05:46
2004.01.05
С днем рождения! 14 декабря.


14-12113
SergP
2003-12-14 18:39
2004.01.05
Срочно нужно. Помогите. Вопрос по MySQL и PHP....


14-12120
sancho
2003-12-08 18:34
2004.01.05
Чем DVD±RW отличается от DVD-RW ?


14-12122
Soft
2003-12-13 21:40
2004.01.05
Таблицы перекодировки символов.