Kompliceret beregning af et lånsom stopper før restgælden er 0
Hej i kloge hoveder.
Er der nogle som ved hvordan man kan lave en beregning af et lån på f.eks. 100.000 som skal løbe over f.eks. 3 år (36 mdr) og derefter ophøre når der er f.eks. 20% tilbage af lånebeløbet. Altså 20.000 i overstående tilfælde.
Ja, det er rigtigt forstået. Normalt når man laver en låneberegning, hvor man regner den månedlige ydelse ud, går man ud fra, at lånet skal slutte på kr. 0! Det specielle ved min beregning er, at lånet skal stoppet ved en given procentdel af hovedstolen. Altså f.eks. 20% af 100.000, hvilket jo er 20.000 ...
Et eksempel kunne være (i cirka-tal)
Hovedstol 100.000 Månedlig ydelse vil cirka være 2.500 (indtil der mangler 20.000) Sidste ydelse 20% af de 100.000 = 20.000
Der skal altså beregnes en månedlig ydelse frem til der mangler 20.000 at afdrage. Herefter er sidste ydelse kr. 20.000
Renterne skal selvfølgelig beregnes ned til der mangler de famøse 20%, altså til der mangler 20.000
Min kode indtil videre:
<html>
<HEAD>
<SCRIPT LANGUAGE="JavaScript"> function Loan() { var housePrice; var IR; var dpayment; var years; var monthPay; var month; switch(document.calcform.startm.value) { case "januar": document.calcform.startm.value="0"; parseInt(document.calcform.startm.value) break; case "februar": document.calcform.startm.value="1"; parseInt(document.calcform.startm.value) break; case "marts": document.calcform.startm.value="2"; parseInt(document.calcform.startm.value); break; case "april": document.calcform.startm.value="3"; parseInt(document.calcform.startm.value); break; case "maj": document.calcform.startm.value="4"; parseInt(document.calcform.startm.value); break; case "juni": document.calcform.startm.value="5"; parseInt(document.calcform.startm.value); break; case "juli": document.calcform.startm.value="6"; parseInt(document.calcform.startm.value); break; case "august": document.calcform.startm.value="7"; parseInt(document.calcform.startm.value); break; case "september": document.calcform.startm.value="8"; parseInt(document.calcform.startm.value); break; case "oktober": document.calcform.startm.value="9"; parseInt(document.calcform.startm.value); break; case "november": document.calcform.startm.value="10"; parseInt(document.calcform.startm.value); break; case "december": document.calcform.startm.value="11"; parseInt(document.calcform.startm.value); break; default: document.calcform.startm.value="0"; parseInt(document.calcform.startm.value); break; } housePrice = parseFloat(document.calcform.price.value); dpayment = parseFloat(document.calcform.dpayment.value); IR = parseFloat(document.calcform.interest.value); years = parseFloat(document.calcform.time.value); housePrice = housePrice - dpayment; month = years * 12; interestRate = IR / 12; negmonth =- 1 * month; var bottom = 1 - (Math.pow(interestRate+1,negmonth)); var top = interestRate; var mid = top / bottom; var dec; document.calcform.monthPay.value = (housePrice * mid); monthPay = document.calcform.monthPay.value; document.calcform.monthPay.value = eval(monthPay); housePrice = housePrice - document.calcform.monthPay.value; document.calcform.month.value = month; } function convert() { var startmonth = new String(); startmonth = document.calcform.startm.value; document.calcform.startm.value = startmonth.toLowerCase(); } function changenum() { document.calcform.startyear.value=parseInt(document.calcform.startyear.value); } var d = new Date; function getFieldValue (strFieldName) { var strFieldValue; var objRegExp = new RegExp(strFieldName + "=([^&]+)","gi"); if (objRegExp.test(location.search)) strFieldValue = unescape(RegExp.$1); else strFieldValue=""; return strFieldValue; } function Currency(money1) { var money = new String(money1); var decimal = money.indexOf(".",[0]); var money = money.substring(0,decimal+3); var money1 = parseFloat(money); return money; } var startmonth; startmonth = getFieldValue("startm"); var monthofpayment = new String; month = getFieldValue("month"); monthPay = getFieldValue("monthPay"); Houseprice = getFieldValue("price"); Ir = getFieldValue("interest"); Ir = Ir/12; year = getFieldValue("startyear") function check() { var dPayment = document.calcform.dpayment.value; var price = document.calcform.price.value; if(price.indexOf(",") >= 0) { alert("Please do not put commas in the Price number") } } function check1() { var dPayment = document.calcform.dpayment.value; if(dPayment.indexOf(",") >= 0) { alert("Please do not put commas in the Down Payment number"); } } // End --> </script>
I princippet tror jeg, at det faktisk er umuligt at beregne, men man kan jo approksimere sig frem til det, ved at vedblive at kalde en simpel annuitets-funktion, her en pseudo-kode:
Er ret sikker på det kan beregnes korrekt. Det kan man ihvertfald på en lommeregner. Der ligger man simpelthen et sidste afdrag ind på f.eks. 20.000 og så finder lommeregneren ellers ud af ydelsen indtil da. Så samme formel må jo kunne få pc'en til at bruge. Prøver lige at kigge lidt på din pseudokode, roenving!
-- og jeg fandt også ud af, at man som standard betaler renter pr. måned, så det egentlig er en simpel annuitetsberegning:
Man skal bare beregne afdrag på den del af gælden, som er differencen mellem start og slut (og så selvfølgelig tillægge hver måneds ydelse renter af slut-beløbet !-)
Altså bliver ydelse pr. måned:
ydelse på afdragsgæld (hovedstol-rest) + rente på rest ...
-- og Excel klarer det direkte, så det er bare annuitetsformlen, der skal findes frem !-)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.