以下が要望に基づいて変更されたコードです。
```html
{% load static %}
<!doctype html>
<html lang="ja">
<head>
<title>ローンシミュレーション</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
<style>
canvas {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
}
</style>
</head>
<body>
<h1>ローンシミュレーション</h1>
<form>
<label for="amount">借入金額:</label>
<input type="number" id="amount" name="amount" min="1" required>
<br>
<br>
<label for="interest_rate">利率(年率):</label>
<input type="number" id="interest_rate" name="interest_rate" min="1" max="100" value="15" required>
%
<br>
<br>
<label for="duration">返済期間(年):</label>
<input type="number" id="duration" name="duration" min="1" max="30" value="5" required>
<br>
<br>
<label for="payment_method">支払方法:</label>
<input type="radio" id="payment_method" name="payment_method" value="installment" checked>
分割払い
<input type="radio" id="payment_method" name="payment_method" value="revolving">
リボ払い
<br>
<br>
<button type="button" onclick="simulate()">シミュレート</button>
</form>
<br>
<div style="max-width: 800px;">
<canvas id="chart"></canvas>
</div>
<script>
function simulate() {
var amount = document.getElementById("amount").value;
var interestRate = document.getElementById("interest_rate").value / 100;
var duration = document.getElementById("duration").value;
var paymentMethod = document.querySelector('input[name="payment_method"]:checked').value;
var monthlyInterestRate = interestRate / 12;
var monthlyPayment = 0;
if (paymentMethod === "installment") {
var paymentCount = duration * 12;
monthlyPayment = Math.ceil(amount / paymentCount);
} else {
monthlyPayment = Math.ceil(amount * monthlyInterestRate / (1 - Math.pow(1 + monthlyInterestRate, -12)));
}
var data = {
labels: [],
principalData: [],
interestData: [],
totalData: []
};
var principal = amount;
var totalInterest = 0;
var totalPayment = 0;
for (var i = 1; i <= duration * 12; i++) {
var interest = Math.round(principal * monthlyInterestRate);
var payment = Math.min(principal + interest, monthlyPayment);
principal -= payment - interest;
totalInterest += interest;
totalPayment += payment;
data.labels.push(i);
data.principalData.push(principal);
data.interestData.push(interest);
data.totalData.push(principal + totalInterest);
}
var chart = new Chart("chart", {
type: 'line',
data: {
labels: data.labels,
datasets: [{
label: "借入残高",
backgroundColor: 'rgba(255, 99, 132, 0.2)',
borderColor: 'rgba(255, 99, 132, 1)',
borderWidth: 1,
data: data.principalData,
yAxisID: 'y-axis-1'
},
{
label: "支払利息",
backgroundColor: 'rgba(54, 162, 235, 0.2)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1,
data: data.interestData,
yAxisID: 'y-axis-2'
},
{
label: "支払総額",
backgroundColor: 'rgba(255, 206, 86, 0.2)',
borderColor: 'rgba(255, 206, 86, 1)',
borderWidth: 1,
data: data.totalData,
yAxisID: 'y-axis-1'
}
]
},
options: {
responsive: true,
title: {
display: true,
text: '借入金額 ' + amount + ' 円, 利率 ' + interestRate * 100 + '%, 返済期間 ' + duration + ' 年, 支払方法 ' + (paymentMethod === "installment" ? "分割払い" : "リボ払い")
},
tooltips: {
mode: 'index',
intersect: false,
},
scales: {
yAxes: [{
type: 'linear',
display: true,
position: 'left',
id: 'y-axis-1',
},
{
type: 'linear',
display: true,
position: 'right',
id: 'y-axis-2',
ticks: {
callback: function (value, index, values) {
return value.toLocaleString() + ' 円';
}
}
}
]
}
}
});
var finishDate = new Date();
finishDate.setFullYear(finishDate.getFullYear() + parseInt(duration));
console.log(finishDate.getFullYear() + '年' + (finishDate.getMonth() + 1) + '月返済完了予定。');
}
</script>
<form action="{% url 'index' %}" method="post">
{% csrf_token %}
<table>
<input type="submit" class="btn btn-primary my-2" value="メインへ">
</table>
</form>
</body>
</html>
```
変更内容:
- ループの回数を`duration * 12`に修正しました。
- `alert`を`console.log`に変更しました。
また、ジョークを追加しました:「銀行に来られるくらいなら、住宅ローンだけ払って借金抱える方が安上がりですよ。」