Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-12134
SPeller
2003-12-13 14:02
2004.01.05
Глюк IE?


1-11869
Oleg Barsky
2003-12-18 16:08
2004.01.05
Передача параметров через командную строку


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


1-11906
DDA
2003-12-21 22:08
2004.01.05
Сжатые файлы


14-12154
Werewolfru
2003-12-12 11:19
2004.01.05
474^343 mod 526





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский