存款累计计算脚本问题求助:每日追加10%收益功能未实现
解决方案
原代码的核心问题是每次调用calculate都会重新从输入框读取存款额并重新计算初始10%收益,没有持久化存储累计收益和追踪天数,导致无法实现每日追加的逻辑。以下是修复后的完整实现:
关键改进点
- 用全局变量持久化存储累计收益、每日追加额和已过天数,避免每次计算重置数据
- 首次计算时初始化所有核心数值,后续仅处理每日追加逻辑
- 加入输入有效性校验,防止非数字/负数输入
- 30天到期后自动停止定时器,避免无效执行
- 格式化金额显示,保证小数点后两位的规范格式
修复后的代码
// 全局变量存储核心计算数据 let totalEarnings = 0; let dailyAddition = 0; let daysPassed = 0; const MAX_DAYS = 30; // 设定最大追加天数 function calculate() { // 首次执行:初始化初始收益和每日追加额 if (daysPassed === 0) { const deposit = parseFloat(document.getElementById("deposit").value); // 校验输入有效性 if (isNaN(deposit) || deposit <= 0) { document.getElementById("deposit_display").innerHTML = "请输入有效的存款金额"; return; } // 初始收益 = 存款额 × 10% totalEarnings = deposit * 0.1; // 每日追加的等额金额 = 存款额 × 10% dailyAddition = deposit * 0.1; } // 仅在30天内执行追加逻辑 if (daysPassed < MAX_DAYS) { // 从第2天开始追加收益(第1天显示初始收益) if (daysPassed > 0) { totalEarnings += dailyAddition; } daysPassed++; // 格式化并更新显示 document.getElementById("deposit_display").innerHTML = totalEarnings.toFixed(2); // 30天到期后停止定时器并提示 if (daysPassed === MAX_DAYS) { clearInterval(window.earningInterval); document.getElementById("deposit_display").innerHTML += "(已完成30天收益追加)"; } } } // 页面加载时先计算并显示初始收益 calculate(); // 测试阶段可使用1000毫秒(1秒)模拟每日周期,上线后改为86400000(24小时) window.earningInterval = setInterval(calculate, 1000);
使用说明
- 输入有效的存款金额后,页面会立即显示初始10%的收益
- 每经过一个周期(测试时1秒,上线后24小时),会自动追加等额的10%存款收益
- 满30天后,定时器自动停止,显示完成提示
内容的提问来源于stack exchange,提问作者Kaziibwe Alfred
相关产品推荐
相关产品推荐

