Не прекращающаяся ошибка десятичного расширения, несмотря на попытки исправить SO - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь написать простой метод 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);
    }
...