Top.Mail.Ru
Ответы

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

Как я понял, на точное равенство числа с плавающей точкой сравнить не удастся (поправьте, если ошибаюсь).
Но возможно некое приблизительное сравнение, как оно осуществляется?

Дополнен

Вопрос в тесте на начальный уровень знаний Java.

Дополнен

Или достаточно будет упомянуть метод equals?

По дате
По рейтингу
Аватар пользователя
Гуру
8лет

Почему не удастся? Очень даже удастся. Если числа одинаковые то 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