Как правильно сравнить 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));