3 * @author: Jeremy Rayner
4 * based on algorithms by Jeff Louie, Dr W Carlini and Newton
7 println
"__..::~~'''~~::..__"
8 println
"Mortgage Calculator"
9 println
"~~~~~~~~~~~~~~~~~~~"
10 println
"Please input 3 of the 4 values in your mortgage calculation"
11 println
"This program will then calculate the value you leave blank"
15 "Amount of mortgage" : 0.0,
16 "Annual interest rate (%)" : 0.0,
17 "Loan duration (months)" : 0.0,
18 "Monthly payments" : 0.0
21 for (entry in variables
.entrySet()) {
22 print("${entry.key}:")
23 def userInput
= System
.in
.readLine()
24 if ("" == userInput
) {
25 valueToCalculate
= entry
.key
27 entry
.value
= userInput
.toDouble()
31 println
"$valueToCalculate = ${calculateValueOf(valueToCalculate)}"
37 def
calculateValueOf(valueToCalculate
) {
39 def principal
= variables
["Amount of mortgage"]
40 def interest
= variables
["Annual interest rate (%)"] / 1200
41 def months
= variables
["Loan duration (months)"]
42 def payment
= variables
["Monthly payments"]
44 switch (valueToCalculate
) {
45 case "Amount of mortgage":
47 result
= 1/Math
.pow(result
,months
)
48 result
= ((1-result
)/interest
) * payment
50 case "Loan duration (months)":
51 result
= (1 - (principal
* interest
/ payment
))
52 result
= Math
.log(result
)
53 result
= - result
/ Math
.log(1 + interest
)
55 case "Monthly payments":
57 result
= 1 / Math
.pow(result
,months
)
58 result
= (principal
* interest
) / (1 - result
)
60 case "Annual interest rate (%)":
61 result
= payment
/ principal
62 def diff
= 100; def accuracy
= 0.00001; def maxIterations
= 1000
64 while ((diff
> accuracy
) && (index
< maxIterations
)) {
66 def numerator
= (principal
* temp
/ payment
) + Math
.pow((1 + temp
), -months
) - 1
67 def denominator
= (principal
/ payment
) - months
* Math
.pow((1 + temp
), (-months
- 1))
68 result
= temp
- (numerator
/ denominator
)