![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Простая ошибка? (The ‘Real’ is not Real) [D7, WinXP]
Shlomo © (2006-05-02 15:04:00)Здравствуйте!
Помогите, пожалуйста, разобраться. Не могу понять, почему не получается, хотя должно получаться.
Var r: Real;
..
r := 0.02;
if r = 0.02 then ShowMessage(‘Yes’) else ShowMessage(‘No’);
..
Так вот, показывает ‘No’.
Но почему? Почему r <> 0.02?
Desdechado (2006-05-03 11:20:00) [1]http://www.delphimaster.ru/cgi-bin/forum.pl?id=1146211942&n=18
icWasya (2006-05-03 10:52:00) [2]>begin...end © (02.05.06 15:07) [1]
вод Вы говорили
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
А на самом деле ещё хуже
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1217
wal (2006-05-03 09:01:00) [3]
> [9] Гаврила © (02.05.06 22:29)
> а я с нулем попробовал
> получилось 8-0
0, небольшие целые, небольшие отрицательные степени двойки и их комбинации представляются в машине точно.
Джо (2006-05-02 22:51:00) [4]> [11] nt (02.05.06 22:50)
> смех - реакция на непонятное :-)
Боюсь, что последняя фраза может вызвать новые приступы :)
nt (2006-05-02 22:50:00) [5]смех - реакция на непонятное :-)
nt (2006-05-02 22:39:00) [6]> DiamondShark © (02.05.06 22:05) [8]
ну, посмейся...
Гаврила (2006-05-02 22:29:00) [7]а я с нулем попробовал
получилось 8-0
DiamondShark (2006-05-02 22:05:00) [8]
> nt (02.05.06 18:31) [6]
Ты такой смешной...
Anatoly Podgoretsky (2006-05-02 19:05:00) [9]Потому что число 0,02 невозможно представить в машинном исчислении с плавающей запятой, вне зависимости от точности.
nt (2006-05-02 18:31:00) [10]учимся у сишников, ребятки
Var r: Real;
begin
r := 0.02;
if r = real(0.02)
then writeln('Yes') else writeln('No');
end.
yes
nt (2006-05-02 18:27:00) [11]учимся у сишников
Var r: Real;
begin
r := 0.02;
if r = real(0.02 )
then writeln('Yes') else writeln('No');
end.
yes
wal (2006-05-02 15:56:00) [12]
> не даёт конкретных рецептов
А тут никаких конкретных рецептов нет. Если задача позволяет, то работать с целыми (непример, не с рублями, а с копейками), если не позволяет, то точное сравнение там вряд ли нужно, используй неточное, что-то вроде if Abs(r-0.02)<0.001 then ...
С уважением.
Palladin (2006-05-02 15:54:00) [13]1 использовать Currency
2 If trunc(r*100)=2
Shlomo (2006-05-02 15:52:00) [14]begin...end ©
Спасибо за ссылку.
Но всё-таки, автор статью не даёт конкретных рецептов. Подскажите пожалуйста, если не трудно.
begin...end (2006-05-02 15:07:00) [15]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374