Я пытаюсь написать простой метод InterestEarned, который использует количество дней текущего состояния счета, чтобы увидеть, какую часть общего годового процента должен получить счет. например, в течение полных 365 дней учетная запись должна получить полный процент 0,1.
Однако у меня есть следующие ошибки во время тестирования:
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
Вот метод:
@Override
public BigDecimal interestEarned(int accountStateNumOfDays) {
MathContext m = new MathContext(2);
BigDecimal amount = sumTransactions();
BigDecimal numOfDays = new BigDecimal(accountStateNumOfDays);
return amount.multiply(proportionOfInterestOwed(checkingAccountInterest, numOfDays), m);
}
@Override
public BigDecimal proportionOfInterestOwed(BigDecimal yearlyInterest, BigDecimal numberOfDays) {
return checkingAccountInterest.multiply(Conversion.doubleToBigDecimalConverter(1).divide(Conversion.doubleToBigDecimalConverter(365)));
}
Я думал, что математический контекст должен был ограничить количество десятичных знаков,Я также попытался вставить RoundingMode.HALF_UP в выражение, но тест ниже возвращает ту же ошибку, что и результат - есть идеи ??
@Test
public void checkingAccount() {
Bank bank = new Bank();
Account checkingAccount = new CheckingAccount();
Customer bill = new Customer("Bill").openAccount(checkingAccount);
bank.addCustomer(bill);
BigDecimal oneHundred = new BigDecimal(100);
checkingAccount.deposit(oneHundred);
BigDecimal naughtPointOne = new BigDecimal(0.1);
// assertEquals(naughtPointOne, bank.totalInterestPaid(), DOUBLE_DELTA);
Assert.assertEquals(naughtPointOne.ROUND_HALF_EVEN, checkingAccount.interestEarned(365).ROUND_HALF_EVEN, DOUBLE_DELTA);
}