Я хочу вычитать 2 double
значений, и я пробовал следующий код.BigDecimal Вычитание
double val1 = 2.0;
double val2 = 1.10;
System.out.println(val1 - val2);
, и я получил результат, как,
0.8999999999999999
Для получения вывода, как 0.9
я попытался с BigDecimal
следующим образом,
BigDecimal val1BD = new BigDecimal(val1);
BigDecimal val2BD = new BigDecimal(val2);
System.out.println(val1BD.subtract(val2BD));
И я получил результат, как,
0.899999999999999911182158029987476766109466552734375
Затем я попытался с BigDecimal.valueOf()
val1BD = BigDecimal.valueOf(val1);
val2BD = BigDecimal.valueOf(val2);
System.out.println(val1BD.subtract(val2BD));
И, наконец, я получил выход в 0.9
.
Мой вопрос в чем разница между случаем 2 & кейс 3?
В случае 2, почему я получил выход так?
Может стоит упомянуть, что лучший способ инициализировать 'BigDecimal' это из' String' или 'символ []'. Когда у вас есть «double», ошибка округления уже сделана. Преобразование обратно в 'String' может или не может отменить эту ошибку. Математически точное двойное значение является лучшим выбором, если вы заинтересованы в точности. – Henry