console
const table = document.querySelector("table>tbody");
document.querySelector("#repay").addEventListener("click", function (e) {
var data = ["total", "type", "year", "rate"];
for (var i in data) {
var d = data[i];
this.setAttribute('data-' + d, document.querySelector("#" + d).value);
}
table.innerHTML = tbody(this);
});
function tbody(_this) {
this._total = 0;
var total = _this.getAttribute('data-total') * 10000;
var month = _this.getAttribute('data-year') * 12;
var rate = _this.getAttribute('data-rate') / 1200;
var fn = eval("this.repay_b" + _this.getAttribute('data-type'));
var items = new Array();
for (var i = 1; i <= month; i++) {
items.push(fn.apply(this, [total, month, rate, i]));
}
return items.map(tr => {
var td = tr.map(td => `<td>${td}</td>`).join('');
return `<tr>${td}</tr>`
}).join('');
}
function repay_bj(t, m, r, p) {
let capital = t / m;
let interest = (t - capital * (p - 1)) * r;
let payment = capital + interest;
let balance = t * (1 - p / m);
this._total += interest;
return new Array(p, payment.toFixed(2), capital.toFixed(2), this._total.toFixed(2), balance.toFixed(2));
}
function repay_bx(t, m, r, p) {
let payment = t * r * Math.pow(1 + r, m) / (Math.pow(1 + r, m) - 1);
let capital = t * r * Math.pow(1 + r, p - 1) / (Math.pow(1 + r, m) - 1);
let balance = t * (Math.pow(1 + r, m) - Math.pow(1 + r, p - 1)) / (Math.pow(1 + r, m) - 1) - capital;
let interest = payment - capital + this._total;
this._total = interest;
return new Array(p, payment.toFixed(2), capital.toFixed(2), interest.toFixed(2), balance.toFixed(2));
}
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width">
<title>贷款计算器plem.cn</title>
</head>
<body>
<select id="type"><option value="j">本金</option><option value="x">本息</option></select>
<button id="repay"> 计算 </button><br />
<input id="total" value="150" placeholder="总额,单位万,如150" />
<input id="year" value="30" placeholder="期限,单位年,如30" />
<input id="rate" value="5.85" placeholder="年化率,如5.85" />
<table>
<thead>
<tr>
<th>期数</th>
<th>每月还款额</th>
<th>本金</th>
<th>累计利息</th>
<th>剩余贷款额</th>
</tr>
</thead>
<tbody></tbody>
</table>
<a href="https://beian.miit.gov.cn/" target="_blank" style="position: fixed;bottom: 0;">粤ICP备20012318号 @plem.cn</a>
</body>
</html>
input {
width: 80%
}
a {
position: fixed;
bottom: 0;
text-decoration: none;
}
table tbody {
display: block;
height: 450px;
overflow-y: scroll
}
table thead,
tbody tr {
display: table;
width: 100%;
table-layout: fixed;
}
table head {
width: calc( 100% - 1.1em)
}
td,th{
text-align: center
}