Как правильно сравнить double и float

Имеется такой код:

double doubleValue = 1.1D;
float floatValue = 1.1F;

Log.d("tagTest", "== -> " + (doubleValue == Double.valueOf((double) floatValue)));    
Log.d("tagTest", "== -> " + (doubleValue == floatValue));
Log.d("tagTest", "== -> " + (doubleValue == ((double)floatValue)));

D/tagTest: == -> false

D/tagTest: == -> false

D/tagTest: == -> false

Вопрос: Есть ли возможность сравнивать два этих типа?

UP: Можно еще сравнить так, но в этом случае и в случае из комментария мы теряем точность.

Log.d("tagTest", "== -> " + ((float)doubleValue == floatValue));

D/tagTest: == -> true

Самое главное, к чему я пришел, их никак правильно не сравнишь.

На хабре прочитал такое:

Статья также написана для тех из вас, у кого много данных. Если вам требуется несколько чисел тут или там, просто используйте double и не забивайте себе голову!


Ответы (1 шт):

Автор решения: Егор68

Сравнивайте разницу чисел с точностью float:

double d = 1.1;          
float f = 1.1f;
System.out.println(Math.abs(d - f) < 1e-7 * Math.abs(f));
→ Ссылка