Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как нужно сравнивать вещественные числа на равенство в Java?

Свят Профи (500), на голосовании 7 лет назад
Как я понял, на точное равенство числа с плавающей точкой сравнить не удастся (поправьте, если ошибаюсь).
Но возможно некое приблизительное сравнение, как оно осуществляется?
Дополнен 7 лет назад
Вопрос в тесте на начальный уровень знаний Java.
Дополнен 7 лет назад
Или достаточно будет упомянуть метод equals?
Голосование за лучший ответ
cfif Гуру (4642) 7 лет назад
Почему не удастся? Очень даже удастся. Если числа одинаковые то equals для Double/Float и "==" для double/float вполне себе сгодятся, другой вопрос что специфика записи этих типов в java (на самом деле не только в java, но сейчас именно о ней) такова, что:
double a=0.3-0.2-0.1d;
double b = 0.0d;
a==b будет false ибо в "а" будет записан не 0, а чуть-чуть меньше.
Два доступных варианта, и оба они весьма хуёвы:
1:
double d = 12.1354678578862;
d = d * 1000;
int i = (int) Math.round(d);
d = (double)i / 1000;
2:
double d = 12.1354678578862;
double newDouble = new BigDecimal(d).setScale(3, RoundingMode.UP).doubleValue();
Одно из лучших и доступных обсуждений чё там за ерня твориться - здесь:
javatalks.ru/topics/2144
Похожие вопросы