Чтобы преобразовать -1.0D в Double, лучше всего обычно использовать Double.valueOf (-1.0D). Класс Double кэширует результаты вызовов valueOf, так что вы не всегда будете создавать новый объект в куче. Но еще лучше переоборудовать в дубль, что дешевле. Используйте out.doubleValue()
, чтобы получить значение как двойное. Единственное предостережение в том, что out может быть нулевым, что является отдельным случаем, который, вероятно, стоит выявить сам по себе.
Вам также следует остерегаться неточностей с плавающей точкой при проверке прямого равенства таким способом. Два числа, которые теоретически равны, могут не иметь точных представлений, поскольку в большинстве операций с плавающей запятой присутствует некоторая ошибка округления. Простое решение, которое будет работать в этом случае, состоит в том, чтобы проверить, меньше ли разница, чем некоторая дельта:
assertTrue(Math.abs(-1.0D-out.doubleValue()) < delta);
Вы также можете использовать удобный метод JUnit для этого:
assertEquals(-1.0d, out.doubleValue(), delta);
Используйте очень маленькое значение для дельты, например 10E-10, или что-то подходящее для вашего приложения. В самом общем случае, если вы не знаете диапазон значений, которые вы сравниваете, вам нужно умножить дельту на относительный размер каждого числа, например:
double tDelta = delta*(Math.abs(-1.0D)+Math.abs(out.doubleValue()));
assertEquals(-1.0d, out.doubleValue(), tDelta);
Если вы сравниваете очень большие числа, вы хотите, чтобы разрешенная дельта была больше, а если вы сравниваете очень маленькие числа, вы хотите, чтобы разрешенная дельта была меньше. Но для вашего случая вы заранее знаете один из своих параметров, так что вы можете просто жестко кодировать дельту.