You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript 如何计算复利计息下的累计总缴费金额?

问题根源

你使用的累计缴费公式完全错误,混淆了复利增长的数学计算逻辑。你的场景本质是年复利增长的等比数列求和,直接套用标准等比数列公式即可,无需使用原站点给出的total计算式。

计算逻辑对齐

先和你给出的示例规则匹配时间轴:

  • a为初始基准缴费额(第0年的缴费额度)
  • 年增长率i为百分数转成的小数,每年缴费在上一年基础上增长i
  • 你现有代码中计算第d年缴费额的逻辑是正确的:payment = a * (1+i) ** d,代入示例参数得到的50年后约1147美元的结果完全符合预期
  • 累计总缴费是第1年到第d年所有缴费额的总和,对应标准等比数列求和:
    • 首项为第1年缴费额:a*(1+i)
    • 公比为年增长倍数:(1+i)
    • 项数为总缴费年数:d
    • 求和公式简化后为:total = a * (1+i) * (((1+i) ** d) - 1) / i

数值验证

代入示例参数(a=100,i=5%=0.05,d=50):
total = 100 * 1.05 * (1.05**50 - 1) / 0.05 ≈ 21981.54美元
你手动累加得到21985美元的差异,是因为给出的年度明细对每一年缴费额做了取整处理,产生了微小累积误差,属于正常情况。

修正代码

替换原有错误的total计算逻辑即可,修改后的JS函数:

function myFunction() {
  var a = +document.getElementById('amount').value;
  var i = +document.getElementById('percentage').value / 100;
  var d = +document.getElementById('duration').value;

  var payment = a * ((1 + i) ** d);
  // 等比数列求和计算累计总缴费
  var total = a * (1 + i) * (((1 + i) ** d) - 1) / i;

  document.getElementById('payment').textContent = payment.toFixed(2);
  document.getElementById('total').textContent = total.toFixed(2);
}

原有HTML结构不需要修改,保持原逻辑即可。

若你的实际缴费规则是从第0年就开始缴费(即第一年缴费就是初始的100美元,之后再逐年增长),将total公式改为total = a * (((1 + i) ** d) - 1) / i即可,对应计算第0年到第d-1年的缴费总和。


内容的提问来源于stack exchange,提问作者user1800520

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 19:15:10