if (floor(value1*100) == floor(value2*100))
// ...
else
// ...
Проблема с float и double
double value1 = 0.12390345
double value2 = 0.12390359
как видете они не равны, но при сравнивание мне нужно чтобы ставнивалось посье запятой например 2 цифры тогда value1 = value2
Как это сделать :confused: :confused:
Код:
а если именно две цифры после запятой и ничто иное, то:
Код:
if (floor((value1-floor(value1))*100) == floor((value2-floor(value2))*100) )
// ...
else
// ...
// ...
else
// ...
например
double d = 123.456789
d = (int)(d*100);
Цитата: Ation
Достаточно преобразования типов
например
double d = 123.456789
d = (int)(d*100);
например
double d = 123.456789
d = (int)(d*100);
Ation так делать не рекомендуется, т.к. если
Код:
double value1 = 5234567890.12390345;
double value2 = 1234567890.12390359;
double value2 = 1234567890.12390359;
то получим переполнение и работать будет некорректно.
http://forum.codenet.ru/showthread.php?t=24605&page=4
Все сводится к тому, что преобразование float к int выполняется всегда верно (верно выделяется целая часть), а double к int - не всегда
Умножь обе переменные на 100, отбрось дробную часть и сравни оставшиеся целые части и на этой основе сделай вывод.
Цитата: ViToBrother
У меня есть две переменной
double value1 = 0.12390345
double value2 = 0.12390359
как видете они не равны, но при сравнивание мне нужно чтобы ставнивалось посье запятой например 2 цифры тогда value1 = value2
Как это сделать :confused: :confused:
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();
if(abs(value1 - value2) < e)
Equal();
else
NotEqual();
Цитата: Matush
Сравнивай не значения, а их разность
Код:
double e = 0.001;
if(abs(value1 - value2) < e)
Equal();
else
NotEqual();
if(abs(value1 - value2) < e)
Equal();
else
NotEqual();
Самое умное решение :) и, кстати, самое быстрое из предложенных
Цитата: ViToBrother
У меня есть две переменной
double value1 = 0.12390345
double value2 = 0.12390359
как видете они не равны, но при сравнивание мне нужно чтобы ставнивалось посье запятой например 2 цифры тогда value1 = value2
Как это сделать :confused: :confused:
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/ ).