24. januar 2012 - 20:11
Der er
7 kommentarer og
1 løsning
beregning af lån
Hejsa.
Hvis man skal beregne et lån i excel, hvor man også får alle afdrag med osv, hvordan kan man gøre det. Fx:
Hovedstol: 60.000 kr.
Rente: 8,750%
Afdrag 3000 kr
Hvis man nu skal beregne løbetiden ud fra dette, og man skal have den ud i en tabel, hvor alle beløbene kommer op, fx:
01.02-2012: 57.000
01.03-2012: 54.000
01.04-2012: 51.000
osv.
Mvh Julie
24. januar 2012 - 21:18
#2
og den sjove - nogle banker har lagt betaling ind hver måned, og kvartalsvis rentetilskrivning.
Så er der 4 terminer, og to ud af tre måneder vil låner betale 'forud' uden at få en 10-øre i rente. Der har banken så det indbetalte stående gratis.
28. januar 2012 - 04:33
#8
Java !!
:-)
import java.math.BigDecimal;
public class LoanCalculations {
private static void display(Loan loan) {
while(!loan.isPaid()) {
System.out.printf("%2d %10.2f %10.2f %10.2f %10.2f\n", loan.getPeriod(), loan.getPrincipalBalance(), loan.getInterestPaid(), loan.getPrincipalPaid(), loan.getPayment());
loan.moveOnePeriod();
}
}
public static void main(String[] args) {
display(new FixedPrincipalPaidLoan(new BigDecimal("60000.00"), 0.08750/12, new BigDecimal("3000.00")));
display(new FixedPrincipalPaidLoan(new BigDecimal("60000.00"), 0.08750/12, 20));
display(new FixedPaymentLoan(new BigDecimal("60000.00"), 0.08750/12, new BigDecimal("3000.00")));
display(new FixedPaymentLoan(new BigDecimal("60000.00"), 0.08750/12, 22));
display(new FixedPaymentLoan(new BigDecimal("60000.00"), new BigDecimal("2961.78"), 22));
}
}
abstract class Loan
{
private BigDecimal principal;
private double interest;
private int period;
public Loan(BigDecimal principal, double interest) {
this.principal = principal;
this.interest = interest;
this.period = 1;
}
public boolean isPaid() {
return principal.signum() < 1;
}
public void moveOnePeriod() {
principal = principal.subtract(getPrincipalPaid());
period++;
}
public int getPeriod() {
return period;
}
public BigDecimal getPayment() {
return getPrincipalPaid().add(getInterestPaid());
}
public BigDecimal getInterestPaid() {
return principal.multiply(new BigDecimal(interest)).setScale(2, BigDecimal.ROUND_HALF_UP);
}
public BigDecimal getPrincipalPaid() {
BigDecimal unadj = getPrincipalPaidUnadjusted();
if(getPrincipalBalance().doubleValue() >= unadj.doubleValue()) {
return unadj;
} else {
return getPrincipalBalance();
}
}
public BigDecimal getPrincipalBalance() {
return principal;
}
protected abstract BigDecimal getPrincipalPaidUnadjusted();
}
class FixedPrincipalPaidLoan extends Loan {
private BigDecimal principalPaid;
public FixedPrincipalPaidLoan(BigDecimal principal, double interest, int periods) {
super(principal, interest);
this.principalPaid = principal.divide(new BigDecimal(periods));
}
public FixedPrincipalPaidLoan(BigDecimal principal, double interest, BigDecimal principalPaid) {
super(principal, interest);
this.principalPaid = principalPaid;
}
public BigDecimal getPrincipalPaidUnadjusted() {
return principalPaid;
}
}
class FixedPaymentLoan extends Loan {
private static final double EPS = 0.00000001;
private static double alfa(double interest, int periods) {
return (1 - Math.pow(1 + interest, -periods)) / interest;
}
private static double invalfa(double targetalfa, int periods) {
double interest = 0.0001;
double previnterest;
do {
previnterest = interest;
interest = interest - (alfa(interest, periods) - targetalfa) / ((alfa(interest + EPS, periods) - alfa(interest, periods)) / EPS);
} while(Math.abs(interest - previnterest) > EPS);
return interest;
}
private BigDecimal payment;
public FixedPaymentLoan(BigDecimal principal, double interest, BigDecimal payment) {
super(principal, interest);
this.payment = payment;
}
public FixedPaymentLoan(BigDecimal principal, double interest, int periods) {
super(principal, interest);
this.payment = new BigDecimal(principal.doubleValue() / alfa(interest, periods)).setScale(2, BigDecimal.ROUND_HALF_UP);
}
public FixedPaymentLoan(BigDecimal principal, BigDecimal payment, int periods) {
super(principal, invalfa(principal.doubleValue() / payment.doubleValue(), periods));
this.payment = payment;
}
public BigDecimal getPrincipalPaidUnadjusted() {
return payment.subtract(getInterestPaid());
}
}