![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
gray_k |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1015 Регистрация: 9.1.2003 Где: Москва Репутация: нет Всего: 22 |
Такая проблема. Есть два числа типа double(это суммы в рублях). Как их корректно сравнить. Я пробовал так:
if(int(summa*1000) == int(itog*1000)) и ещё: if((int(summa*1000) >> 2) == (int(itog*1000)>>2)) Но всё равно иногда условие не срабатывало при вобщем-то равных значениях правой и левой половины условия(смотрел в дебагере). Проблему-то в общем решил, использовав приведение к типу Currency. Но хотелось бы знать, а как такую проблему решить, используя только стандартные типы данных С++. Работаю в С++ Builder (хотя в данном случая какая блин разница? ![]() -------------------- С уважением. Gray. |
|||
|
||||
kruchinin |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 100 Регистрация: 19.4.2003 Репутация: нет Всего: нет |
Сравнить их нельзя.
Можно лишь до какого-то предела. например if ((summa<itog+0.0000001) && (summa>itog-0.0000001)) ... к примеру |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
С каких это пор два числа нельзя сравнить? ![]() Тем более одного типа?!! |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Из вопроса многое не ясно, но я понял что у gray_k проблемы с точностью.
Опять из предположений: необходимо произвести сравнение с точностью до 4 знака. ![]() Предлагаю "дибильный" вариант сравнения на равенство:
|
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
С тех пор как они с плавающей точкой. Нельзя не в том смысле, что нельзя написать double1==double2, а в том смысле, что в связи с представлением чисел с плавающей точкой два числа редко окажуться одинаковыми, даже если они в принципе равны. То есть сравнивниванение имеет смысл только с какой-то погрешностью. Ну в общем, вы и сами знаете. -------------------- Волны гасят ветер... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |