Математическая операция с BigDecimal
Имею поля:
abstract class Card {
private long serialNumber;
private BigDecimal balance;
private boolean credit;
private BigDecimal debt;
Имею метод:
public void withdraw(BigDecimal request) {
balance -= request;
}
Выдает ошибку, просит:
Вроде все варианты попробовал, все-равно ошибка. Что ему надо?
Ответы (2 шт):
BigDecimal и BigInteger оба класса имутабельны. Полученный объект изменить нельзя. Операции с объектами производятся только через методы.
MathContext mc = new MathContext(2); // 2 precision
bg1 = new BigDecimal("100.123");
bg2 = new BigDecimal("50.56");
// subtract bg1 with bg2 using mc and assign result to bg3
bg3 = bg1.subtract(bg2, mc);
Не понимаю, за что так заминусовали вопрос. Все мы когда-то учились.
Смотрите, составной оператор присваивания:
balance -= request;
вашем случае раскрывается следующим образом:
balance = (BigDecimal) (balance - request);
Вся проблема в том, что в Java выполнение операции balance - request невозможно. С оператором "минус" могут использоваться только примитивные типы данных, а BigDecimal -- ссылочный тип.
Ваш метод долен выглядеть так:
public void withdraw(BigDecimal request) {
balance = balance.subtract(request);
}
И вообще привыкайте. Там где мы работаем с BigInteger и BigDecimal, операторы +-/*% не применимы. Там всё через методы: add(), substract() и т.п. Так что выражения с BigDecimal получаются очень громоздкими. Но за то вычисления точные.
