@Override public BigDecimal getShareAtRisk() { if (isZero(czkInvested)) { // protected against division by zero return BigDecimal.ZERO; } return divide(czkAtRisk, czkInvested); }
@Override public BigDecimal getShareAtRisk() { if (isZero(czkInvested)) { // protected against division by zero return BigDecimal.ZERO; } return divide(czkAtRisk, czkInvested); }
public static BigDecimal divide(final Number numerator, final Number denominator) { return divide(toBigDecimal(numerator), denominator); }
public static BigDecimal divide(final BigDecimal numerator, final Number denominator) { return divide(numerator, toBigDecimal(denominator)); }
public static BigDecimal divide(final Number numerator, final BigDecimal denominator) { return divide(toBigDecimal(numerator), denominator); }
public static BigDecimal divide(final Number numerator, final Number denominator) { return divide(toBigDecimal(numerator), denominator); }
public static BigDecimal divide(final BigDecimal numerator, final Number denominator) { return divide(numerator, toBigDecimal(denominator)); }
public static BigDecimal divide(final Number numerator, final BigDecimal denominator) { return divide(toBigDecimal(numerator), denominator); }
static BigDecimal feePaid(final BigDecimal originalValue, final BigDecimal interestRate, final int originalTerm, final BigDecimal annualFee, final int totalMonths) { final BigDecimal monthlyRate = divide(interestRate, 12); final BigDecimal monthlyFee = divide(annualFee, 12); final BigDecimal pmt = FinancialUtil.pmt(monthlyRate, originalTerm, originalValue); final BigDecimal result = IntStream.range(0, totalMonths) .mapToObj(term -> FinancialUtil.fv(monthlyRate, term + 1, pmt, originalValue).negate()) .map(fv -> times(fv, monthlyFee)) .reduce(BigDecimal.ZERO, BigDecimalCalculator::plus); LOGGER.debug("Fee paid from {} CZK at {} rate for {} months with {} annual fee over {} months is {} CZK.", originalValue, interestRate, originalTerm, annualFee, totalMonths, result.doubleValue()); return toScale(result); }
static BigDecimal feePaid(final BigDecimal originalValue, final BigDecimal interestRate, final int originalTerm, final BigDecimal annualFee, final int totalMonths) { final BigDecimal monthlyRate = divide(interestRate, 12); final BigDecimal monthlyFee = divide(annualFee, 12); final BigDecimal pmt = FinancialUtil.pmt(monthlyRate, originalTerm, originalValue); final BigDecimal result = IntStream.range(0, totalMonths) .mapToObj(term -> FinancialUtil.fv(monthlyRate, term + 1, pmt, originalValue).negate()) .map(fv -> times(fv, monthlyFee)) .reduce(BigDecimal.ZERO, BigDecimalCalculator::plus); LOGGER.debug("Fee paid from {} CZK at {} rate for {} months with {} annual fee over {} months is {} CZK.", originalValue, interestRate, originalTerm, annualFee, totalMonths, result.doubleValue()); return toScale(result); }
private static BigDecimal expectedInterest(final Investment i, final int totalMonths) { final BigDecimal monthlyRate = divide(i.getInterestRate(), 12); return IntStream.range(0, totalMonths) .mapToObj(month -> FinancialUtil.ipmt(monthlyRate, month + 1, totalMonths, i.getRemainingPrincipal())) .reduce(BigDecimal.ZERO, BigDecimalCalculator::plus).negate(); }
private static BigDecimal expectedInterest(final Investment i, final int totalMonths) { final BigDecimal monthlyRate = divide(i.getInterestRate(), 12); return IntStream.range(0, totalMonths) .mapToObj(month -> FinancialUtil.ipmt(monthlyRate, month + 1, totalMonths, i.getRemainingPrincipal())) .reduce(BigDecimal.ZERO, BigDecimalCalculator::plus).negate(); }
@Override public BigDecimal getShareOnInvestment(final Rating r) { if (isZero(czkInvested)) { // protected against division by zero return BigDecimal.ZERO; } final BigDecimal investedPerRating = this.getCzkInvested(r); return divide(investedPerRating, czkInvested); }
@Override public BigDecimal getShareOnInvestment(final Rating r) { if (isZero(czkInvested)) { // protected against division by zero return BigDecimal.ZERO; } final BigDecimal investedPerRating = this.getCzkInvested(r); return divide(investedPerRating, czkInvested); }
@Override public BigDecimal getAtRiskShareOnInvestment(final Rating r) { final BigDecimal investedPerRating = this.getCzkInvested(r); if (isZero(investedPerRating)) { // protected against division by zero return BigDecimal.ZERO; } return divide(getCzkAtRisk(r), investedPerRating); }
@Override public BigDecimal getAtRiskShareOnInvestment(final Rating r) { final BigDecimal investedPerRating = this.getCzkInvested(r); if (isZero(investedPerRating)) { // protected against division by zero return BigDecimal.ZERO; } return divide(getCzkAtRisk(r), investedPerRating); }
@Test void divisionWithBigDecimalAsSecondArg() { final BigDecimal result = BigDecimalCalculator.divide(3, BigDecimal.valueOf(2)); assertThat(result).isEqualTo(new BigDecimal("1.5")); }
@Test void division() { final BigDecimal result = BigDecimalCalculator.divide(3, 2); assertThat(result).isEqualTo(new BigDecimal("1.5")); }
/** * Emulates Excel/Calc's PMT(interest_rate, number_payments, PV, FV, 0) function, which calculates the mortgage or * annuity payment / yield per period. * @param r - periodic interest rate represented as a decimal. * @param nper - number of total payments / periods. * @param pv - present value -- borrowed or invested principal. * @param fv - future value of loan or annuity. * @return Representing periodic payment amount. */ public static BigDecimal pmt(final BigDecimal r, final int nper, final BigDecimal pv, final BigDecimal fv) { // pmt = r / ((1 + r)^N - 1) * -(pv * (1 + r)^N + fv) final BigDecimal tmp = plus(1, r).pow(nper); return times( divide(r, minus(tmp, 1)), plus(times(pv, tmp), fv).negate() ); }
/** * Emulates Excel/Calc's PMT(interest_rate, number_payments, PV, FV, 0) function, which calculates the mortgage or * annuity payment / yield per period. * @param r - periodic interest rate represented as a decimal. * @param nper - number of total payments / periods. * @param pv - present value -- borrowed or invested principal. * @param fv - future value of loan or annuity. * @return Representing periodic payment amount. */ public static BigDecimal pmt(final BigDecimal r, final int nper, final BigDecimal pv, final BigDecimal fv) { // pmt = r / ((1 + r)^N - 1) * -(pv * (1 + r)^N + fv) final BigDecimal tmp = plus(1, r).pow(nper); return times( divide(r, minus(tmp, 1)), plus(times(pv, tmp), fv).negate() ); }