Я работаю с вычитанием двух больших десятичных чисел. Переходя к методу вычитания, они оба имеют ненулевую точность, но результат имеет точность = 0.
Насколько мне известно, большое десятичное число с точностью до 0 невозможно. Четный 0 имеет точность 1.
Точность - это количество цифр в немасштабированном значении. Например, для числа 123.45 возвращаемая точность равна 5.
(см. Также BigDecimal, точность и масштаб ).
Площадь, о которой идет речь:
BigDecimal test = (centerHP.getReal().subtract(inverseScale));
centerHP.getReal()
возвращает bigDecimal, созданный из этой строки
new BigDecimal(Double.toString(center.getReal()))
и для контекста center.real = -0.79
, который является двойным.
так эффективно
new BigDecimal("-0.79")
InverseScale это просто 1
double scale = 1;
BigDecimal inverseScale = (BigDecimal.ONE.divide(new BigDecimal(Double.toString(scale))));
Я ожидаю, что тест будет bigDecimal со значением -1,79, представление int должно быть -179, с точностью 3 и шкалой 2. Однако сразу после операции сложения в методе вычитания в BigDecimal класс, мои значения таковы:
![right after addition](https://i.imgur.com/nduK0bX.jpg)
и тест равен:
![test value](https://i.imgur.com/XEf5v14.jpg)
Обратите внимание, что все остальные значения верны, только точность кажется неправильной.