JavaScriptで割り勘。
良い参考サイトがあったのでこれをシンプルのしてみます。(計算に必要のないCSSは使わないこととします)
HTLMをそのまま表示
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>割り勘電卓</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="calculator">
<h1>割り勘電卓</h1>
<div class="input-section">
<label for="totalAmount">合計金額:</label>
<input type="number" id="totalAmount" placeholder="5000">
<br>
<label for="peopleCount">人数:</label>
<input type="number" id="peopleCount" placeholder="3">
</div>
<button class="calculate-btn" onclick="calculateSplit()">計算する</button>
<div class="result-section">
<h2 id="result">1人あたりの金額: ¥0</h2>
<h3 id="remainder">余りの金額: ¥0</h3>
<h3 id="individualPayments"></h3>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
仕組みとしては
<div class="input-section">
<label for="totalAmount">合計金額:</label>
<input type="number" id="totalAmount" placeholder="5000">
<br>
<label for="peopleCount">人数:</label>
<input type="number" id="peopleCount" placeholder="3">
</div>
この部分で必要な数字を入力できるようにしています。入力部分は
これで数字を受け取り、
<button class="calculate-btn" onclick="calculateSplit()">計算する</button>
で計算するボタンを作ります。このボタンを押すとJavaScriptが動くようにします。
calculateSplit()関数の中身は
const totalAmount = parseFloat(document.getElementById('totalAmount').value);
const peopleCount = parseInt(document.getElementById('peopleCount').value);
入力を受けて変数に代入します。
if (isNaN(totalAmount) || isNaN(peopleCount) || peopleCount <= 0 || totalAmount <= 0) {
document.getElementById('result').innerText = '正しい金額と人数を入力してください。';
document.getElementById('remainder').innerText = '';
document.getElementById('individualPayments').innerText = '';
return;
}
入力がない、"0"が入力されてボタンが押された場合にコメントが出ます。
const baseAmount = Math.floor(totalAmount / peopleCount);
const remainder = totalAmount % peopleCount;
割り勘する基本となる数字を計算。baseAmountで余りのない数字(割り切れる数字)。remainderで余り、足りない分を出しています。
そして以下で支払額を決めていきます。
let payments = [];
for (let i = 0; i < peopleCount; i++) {
if (i < remainder) {
payments.push(baseAmount + 1); // 余りをカバー
} else {
payments.push(baseAmount); // 基本金額
}
}
割り切れない分については余りの数字だけ"+1"した金額を配列に追加していき、それ以外は割り切れた金額をpayments配列に入れていきます。
あとは表示させる部分を作ってあります。
HTMLのidと紐付け。
document.getElementById('result').innerText = `1人あたりの金額: ¥${baseAmount}`;
document.getElementById('remainder').innerText = `余りの金額: ¥${remainder}`;
そしてこれに表示させる命令
let paymentDetails = "各人の支払い金額: ";
for (let i = 0; i < payments.length; i++) {
paymentDetails += `\n${i + 1}人目: ¥${payments[i]}`;
}
document.getElementById('individualPayments').innerText = paymentDetails;
}
連続処理でpayments配列に入った金額をpaymentDetailsで定義してある文章に結合(+=) させて表示させています。
最後にHTMLの表示部分と紐付けています。
document.getElementById('individualPayments').innerText = paymentDetails;
全体のJavaScriptのコード
function calculateSplit() {
const totalAmount = parseFloat(document.getElementById('totalAmount').value);
const peopleCount = parseInt(document.getElementById('peopleCount').value);
if (isNaN(totalAmount) || isNaN(peopleCount) || peopleCount <= 0 || totalAmount <= 0) {
document.getElementById('result').innerText = '正しい金額と人数を入力してください。';
document.getElementById('remainder').innerText = '';
document.getElementById('individualPayments').innerText = '';
return;
}
// 1人あたりの金額を計算(切り捨て)
const baseAmount = Math.floor(totalAmount / peopleCount);
const remainder = totalAmount % peopleCount;
// 余りをカバーする人数を決定(上位の人が1円多く支払う)
let payments = [];
for (let i = 0; i < peopleCount; i++) {
if (i < remainder) {
payments.push(baseAmount + 1); // 余りをカバー
} else {
payments.push(baseAmount); // 基本金額
}
}
// 結果を表示
document.getElementById('result').innerText = `1人あたりの金額: ¥${baseAmount}`;
document.getElementById('remainder').innerText = `余りの金額: ¥${remainder}`;
// 各人の支払い金額をリスト表示
let paymentDetails = "各人の支払い金額: ";
for (let i = 0; i < payments.length; i++) {
paymentDetails += `\n${i + 1}人目: ¥${payments[i]}`;
}
document.getElementById('individualPayments').innerText = paymentDetails;
}
この記事が気に入ったらサポートをしてみませんか?