Почему результат выполнения BigDecimal.eval() имеет не полную точность, иногда теряет последнюю цифру числа?

У меня есть список функций, одна из которых описана строкой a * 12 + b, в неё, в одном из случаев, передаются значения a = 1369005, b = 101845. Исходя из этого уже понятно, что результат выполнения должен заканчиваться на 5. В результате выполнения указанной ниже строчки кода, я получаю ответ 1.652990E+7.

BigDecimal eval = expression.get().eval();

Что в итоге преобразуется в:

long value : 16529900 
double value : 1.65299E7

Я находил подобную проблему и было указано, что данный метод так же выполняет метод stripTrailingZeros() у самого BigDecimal, потому я переписал обработку результата на такую форму:

BigDecimal eval = expression.get().eval(false);

Это не помогло.

Doc.: https://www.tutorialspoint.com/java/math/bigdecimal_striptrailingzeros.htm


Ответы (1 шт):

Автор решения: Aziz Umarov

Не понятны ваши проблемы но

public static void main(String[] argv) {

    BigDecimal a = BigDecimal.valueOf(1369005);
    BigDecimal b = BigDecimal.valueOf(101845);
    BigDecimal c = a.multiply(BigDecimal.valueOf(12)).add(b);

    System.out.println(c);
    System.out.println(c.doubleValue());
}

выводит 16529905 и 1.6529905E7 как и ожидалось

введите сюда описание изображения

→ Ссылка