Вопрос-ответ

How to compare two double values in Java?

Как сравнить два двойных значения в Java?

Простое сравнение двух двойных значений в Java создает некоторые проблемы. Давайте рассмотрим следующий простой фрагмент кода в Java.

package doublecomparision;

final public class DoubleComparision
{
public static void main(String[] args)
{
double a = 1.000001;
double b = 0.000001;

System.out.println("\n"+((a-b)==1.0));
}
}

Кажется, что приведенный выше код возвращает true вычисление выражения ((a-b)==1.0), но это не так. Вместо этого возвращается false, потому что оценка этого выражения является 0.9999999999999999 которая на самом деле ожидалась, 1.0 которая не равна 1.0 следовательно, условие принимает значение boolean false. Какой наилучший и рекомендуемый способ преодолеть такую ситуацию?

Переведено автоматически
Ответ 1

В принципе, вам не следует проводить точные сравнения, вы должны сделать что-то вроде этого:

double a = 1.000001;
double b = 0.000001;
double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {...}
Ответ 2

Вместо использования double для десятичной арифметики, пожалуйста, используйте java.math.BigDecimal . Это даст ожидаемые результаты.

Для справки взгляните на этот вопрос stackoverflow

Ответ 3

Вы можете использовать Double.compare; Он сравнивает два указанных двойных значения.

Ответ 4
        int mid = 10;
for (double j = 2 * mid; j >= 0; j = j - 0.1) {
if (j == mid) {
System.out.println("Never happens"); // is NOT printed
}

if (Double.compare(j, mid) == 0) {
System.out.println("No way!"); // is NOT printed
}

if (Math.abs(j - mid) < 1e-6) {
System.out.println("Ha!"); // printed
}
}
System.out.println("Gotcha!");
java