Javascript-您如何找到一个数字随时间增加的总数?

时间:2018-07-24 02:36:40

标签: javascript math

感谢您的光临!

我正在创建一个小程序,将显示总复利。
例如,假设一个人每个月的月收入增加5%。他们以1,000美元开始,但是一年后,他们每月可以赚1,820美元。

我已经知道它会显示一年后的月收入(1,820美元),但是我似乎找不到一种方法来显示您在一年中的总收入。 / p>

第1个月= +50
第二个月= +104
第三个月= +160
第4个月= +220
第5个月= +282
第6个月= +348
第7个月= +417
第8个月= +490
第9个月= +566
第10个月= +647
11月= +731
12个月= +820
________________
总计= $ 4,835

通常这很容易做到,但是由于数量,百分比和持续时间都是变量,所以我很茫然。

基本上我想做的是

“金额:1000
 百分比:5
 持续时间:12

 总计:$ 1,820
 总收益:4,835美元”

非常感谢您抽出宝贵的时间来提供帮助!
祝您有美好的一天!

HTML

<input id="amount" type="number" onchange="myFunction()">
<input id="percentage" type="number" onchange="myFunction()">
<input id="duration" type="number" onchange="myFunction()">
<h2 id="payment"></h2>

JAVASCRIPT

function myFunction() {
    var amount = document.getElementById('amount').value;
    var percentage = document.getElementById('percentage').value;
    var duration = document.getElementById('duration').value;

    var payment = Math.round(amount * (1 + (percentage * 0.01) / duration)**(duration**2));

    document.getElementById('payment').textContent=payment;
}

CodePen Example

3 个答案:

答案 0 :(得分:2)

您需要遍历duration中的每个刻度线,计算基准金额的差额并打印出来:

const outputElm = document.getElementById("payment");
const appendP = textContent => {
  outputElm.appendChild(document.createElement('p'))
    .textContent = textContent;
};
function somethingHere() {
  var base = document.getElementById('amount').value;
  var percentage = document.getElementById('percentage').value;
  var duration = document.getElementById('duration').value;
  
  const multiplier = 1 + (percentage*0.01);
  let payment = base;
  for (let i = 0; i < duration; i++) {
    payment *= multiplier;
    appendP(`Month ${i + 1}: +$${Math.round(payment - base)}`);
  }
  appendP('----------------');
  appendP(`Total: $${Math.round(payment)}`);
}
<p>Amount <input id="amount" type="number" value="0" onchange="somethingHere()"></p>

<p>Percentage <input id="percentage" value="5" type="number" onchange="somethingHere()"></p>

<p>Duration <input id="duration" type="number" value="12" onchange="somethingHere()"></p>

<div id="payment"></div>

答案 1 :(得分:2)

首先,您的复利计算是错误的。使用变量DateRangePicker(金额),a(增加)和i(持续时间),复合量将表示为:

compounded amount

然后,对于持续时间内获得的总金额,总和表达式为:

sum expression

可以改写为:

sum rewritten

将其放入JavaScript代码中,您将获得以下内容:

d
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 / i * (((1 + i) ** d) + i * ((1 + i) ** d - d - 1) - 1); 

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

答案 2 :(得分:1)

使用循环来确定每个月的增长。得到增加后,将其添加到增加总数中。

function increase() {
    var amount = document.getElementById('amount').value;
    var percentage = document.getElementById('percentage').value;
    var duration = document.getElementById('duration').value;

    var total = 0;
    for (var i = 1; i <= duration; i++) {
        var payment = Math.round(amount * (1 + (percentage * 0.01) / i)**(i**2));
        total += (payment - amount);
    }
    document.getElementById('payment').textContent=payment;
    console.log(total);
}