для цикла в каждой строке кумулятивный расчет неверен - PullRequest
0 голосов
/ 14 октября 2019

function calc() {
		var aa = document.getElementById("aa").value;
		var bb = document.getElementById("bb").value;
		var cc = document.getElementById("cc").value;
		var dd = document.getElementById("dd").value / 365;

		var r = "";
		var lastTotal = Number(aa);
		
		for (var i = 0; i < dd; i++) {
		
			var firstPart = 1 + ((bb / 100) / cc);
			var secondPart = cc * dd;
			var final = Math.pow(firstPart,secondPart);
			var addition = lastTotal * final;
			var newTotal = lastTotal + addition;
			console.log(addition);

			r += i + 1 + ") " + Math.round(lastTotal) + "---" + Math.round(addition) + "---" + Math.round(newTotal) + "<br/>";
			r += "";
			
			lastTotal = newTotal;
		}

		document.getElementById("table").innerHTML += r;
	}
<div> AA - <input type="text" id="aa" value="12000" /></div>
      <div> BB - <input type="text" id="bb" value="20" /></div>
      <div> CC - <input type="text" id="cc" value="12" /></div>
      <div> DD - <input type="text" id="dd" value="1825" /></div>
      <div> <input type="button" value="Get" onclick="calc();" /></div>
      <br/><br/>
	  <div id="output"></div>
	  <br/><br/>
	  <div id="table"></div>
AA is total number of quantities
BB is percentage
CC is no of times in a year (1 to 12)
DD is total years

Вывод:

1) 12000---32352---44352
2) 44352---119571---163922
3) 163922---441930---605852
4) 605852---1633359---2239211
5) 2239211---6036847---8276058

Но вывод должен быть:

1) 12000---2633---14633
2) 14633---3210---17843
3) 17843---3915---21758
4) 21758---4774---26532
5) 26532---5821---32353

Япытаясь достичь желаемого результата, используя следующую формулу.

AA (1 + ((BB/100)/CC)) ^ (CC*DD)

Я получил правильный результат от Math.round(lastTotal) & Math.round(newTotal). Но проблема Math.round(addition). Я не уверен, где я ошибся ..

1 Ответ

1 голос
/ 16 октября 2019

Проблема в том, что вы пытаетесь распечатать информацию за каждый год, но при этом вычисляете сумму за все годы (5)

Это цикл, который определяетсколько лет, все, что вам нужно сделать, это рассчитать для одного года каждый раз.

То, как я это сделал, это рассчитать конечный баланс за один год

вычесть его из первого депозита иВы получите заработанные проценты

function calc() {
  var aa = document.getElementById("aa").value;
  var bb = document.getElementById("bb").value;
  var cc = document.getElementById("cc").value;
  var dd = document.getElementById("dd").value;

  let totalYears = dd / 365;
  let rate = bb / 100;
  let intrest = aa;

  for (let i = 0; i < totalYears; i++) {
    // first calculate the end balance
    let endBalance = Math.round((intrest * Math.pow((1 + (rate / cc)), cc * 1)));
    // substract the end balance from the first deposit later on the deposit will become the interest because we repalce it
    let interestErned = endBalance - intrest;


    // just my way of printing
    let p = document.createElement('p');
    p.innerHTML = `${(i+1)}) ${intrest}--${interestErned}--${endBalance}`;
    document.querySelector('#table').appendChild(p);

    // override the first deposit by the end balance so we can calculate for the next year and so on
    intrest = endBalance;
  }
}
<div> AA - <input type="text" id="aa" value="12000" /></div>
<div> BB - <input type="text" id="bb" value="20" /></div>
<div> CC - <input type="text" id="cc" value="12" /></div>
<div> DD - <input type="text" id="dd" value="1825" /></div>
<div> <input type="button" value="Get" onclick="calc();" /></div>
<br/><br/>
<div id="output"></div>
<br/><br/>
<div id="table"></div>
...