Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с float и double

1.8K
21 сентября 2007 года
ViToBrother
149 / / 13.05.2007
У меня есть две переменной
double value1 = 0.12390345
double value2 = 0.12390359
как видете они не равны, но при сравнивание мне нужно чтобы ставнивалось посье запятой например 2 цифры тогда value1 = value2
Как это сделать :confused: :confused:
12K
22 сентября 2007 года
lifs
163 / / 06.09.2007
 
Код:
if (floor(value1*100) == floor(value2*100))
 // ...
else
 // ...

а если именно две цифры после запятой и ничто иное, то:
 
Код:
if (floor((value1-floor(value1))*100) == floor((value2-floor(value2))*100) )
 // ...
else
 // ...
2.9K
22 сентября 2007 года
Ation
96 / / 27.07.2004
Достаточно преобразования типов
например
double d = 123.456789
d = (int)(d*100);
12K
22 сентября 2007 года
lifs
163 / / 06.09.2007
Цитата: Ation
Достаточно преобразования типов
например
double d = 123.456789
d = (int)(d*100);


Ation так делать не рекомендуется, т.к. если

 
Код:
double value1 = 5234567890.12390345;
double value2 = 1234567890.12390359;

то получим переполнение и работать будет некорректно.
284
24 сентября 2007 года
michael_is_98
587 / / 25.02.2005
Обсуждение похожей темы размещено здесь
http://forum.codenet.ru/showthread.php?t=24605&page=4
Все сводится к тому, что преобразование float к int выполняется всегда верно (верно выделяется целая часть), а double к int - не всегда
27K
24 сентября 2007 года
JURRI
7 / / 15.09.2007
Умножь обе переменные на 100, отбрось дробную часть и сравни оставшиеся целые части и на этой основе сделай вывод.
292
25 сентября 2007 года
Matush
726 / / 14.01.2004
Цитата: ViToBrother
У меня есть две переменной
double value1 = 0.12390345
double value2 = 0.12390359
как видете они не равны, но при сравнивание мне нужно чтобы ставнивалось посье запятой например 2 цифры тогда value1 = value2
Как это сделать :confused: :confused:



Сравнивай не значения, а их разность

 
Код:
double e = 0.001;
if(abs(value1 - value2) < e)
     Equal();
else
     NotEqual();
30K
26 сентября 2007 года
pilgrim.sa
9 / / 12.09.2007
Цитата: Matush
Сравнивай не значения, а их разность
 
Код:
double e = 0.001;
if(abs(value1 - value2) < e)
     Equal();
else
     NotEqual();


Самое умное решение :) и, кстати, самое быстрое из предложенных

32K
03 октября 2007 года
Yurii
2 / / 02.10.2007
Цитата: ViToBrother
У меня есть две переменной
double value1 = 0.12390345
double value2 = 0.12390359
как видете они не равны, но при сравнивание мне нужно чтобы ставнивалось посье запятой например 2 цифры тогда value1 = value2
Как это сделать :confused: :confused:


Если Вас устраивает ответ Matush'а, то Вы не совсем точно сформулировали вопрос. Рассмотрим случай:
double value1 = 0.29999999
double value2 = 0.30000011
Ответ Matush'а включает и Ваш пример и мой пример. В своей работе я сталкиваюсь со значительно более изощренными сравнениями
(см: http://www.thesa-store.com/products/ ).

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог