Почему результат выполнения 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 шт):
Не понятны ваши проблемы но
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 как и ожидалось
