JS para simulador de aposentadoria
05/02/2019
0
Oi, devs! Tudo bem?
Então, estou tentando desenvolver um simulador de aposentadoria com a ideia de que a pessoa poder saber quanto de dinheiro ela precisa investir para poder se aposentar com lucro depois dos investimentos.
Depois que o código tiver pronto, terei que fazer o front-end e o hotsite para ele.
Sabem se está certo a lógica?
Eu fiz o código via JS:
Então, estou tentando desenvolver um simulador de aposentadoria com a ideia de que a pessoa poder saber quanto de dinheiro ela precisa investir para poder se aposentar com lucro depois dos investimentos.
Depois que o código tiver pronto, terei que fazer o front-end e o hotsite para ele.
Sabem se está certo a lógica?
Eu fiz o código via JS:
//Formatando inputs function conv_number(expr, decplaces) { var str = "" + Math.round(eval(expr) * Math.pow(10, decplaces)); while (str.length <= decplaces) { str = "0" + str; } var decpoint = str.length - decplaces; return (str.substring(0, decpoint) + "." + str.substring(decpoint, str.length)); } //Valores Fixos: var parcial = 4.5 / 100; //taxa de juros anual var rate = Math.pow((1 + parcial), (1 / 12)) - 1; //taxa de juros mensal var type = 1; //deixar default var beginningBalance, endingBalance; //Inputs do Usuário: var periods = 360; //quantidade de meses juntando dinheiro var lifeexpectancy = 360; //expectativa de vida var payment = 7500; //objetivo de aposentadoria var future = 500000; //valor de herança var initial = 500000; //valor que tenho disponível agora var deposit = 1500; //depósitos mensais // Função para cálculo do valor Presente: function pv(rate, nper, pmt, fv) { rate = parseFloat(rate); nper = parseFloat(nper); pmt = parseFloat(pmt); fv = parseFloat(fv); if (nper == 0) { alert("Why do you want to test me with zeros?"); return (0); } if (rate == 0) { // Interest rate is 0 pv_value = -(fv + (pmt * nper)); } else { x = Math.pow(1 + rate, -nper); y = Math.pow(1 + rate, nper); pv_value = -(x * (fv * rate - pmt + y * pmt)) / rate; } pv_value = conv_number(pv_value, 2); return (pv_value); } // Função para cálculo do valor Futuro: function PMT(rate, nperiod, pv, fv, type) { if (!fv) fv = 0; if (!type) type = 0; if (rate == 0) return -(pv + fv) / nperiod; var pvif = Math.pow(1 + rate, nperiod); var pmt = rate / (pvif - 1) * -(pv * pvif + fv); if (type == 1) { pmt /= (1 + rate); }; return pmt; } function FV(rate, nper, pmt, pv, type) { var pow = Math.pow(1 + rate, nper), fv; if (rate) { fv = (pmt * (1 + rate * type) * (1 - pow) / rate) - pv * pow; } else { fv = -1 * (pv + pmt * nper); } return fv.toFixed(2); } var myArray = new Array(); var myArray2 = new Array(); var CenarioA = new Array(); var myArrayB = new Array(); var myArrayB2 = new Array(); var CenarioB = new Array(); var myArrayC = new Array(); var myArrayC2 = new Array(); var CenarioC = new Array(); var vp = pv(rate, periods, payment, future, type); vp = vp * -1; vp_temp = vp * -1 //Valor 1 var result = PMT(rate, lifeexpectancy, initial, vp_temp, 0); beginningBalance = endingBalance = initial; for (var a = 0; a <= periods; a++) { beginningBalance = endingBalance endingBalance = parseFloat(beginningBalance * (1 + rate) + result); myArray[a] = beginningBalance; } var lastItem = myArray.pop(); beginningBalance2 = endingBalance2 = lastItem; for (var b = 0; b <= lifeexpectancy; b++) { beginningBalance2 = endingBalance2; endingBalance2 = parseFloat((beginningBalance2 - payment) + (beginningBalance2 * rate)); if (endingBalance2 > future) { myArray2[b] = endingBalance2; } else { myArray2[b] = future; } } CenarioA = myArray.concat(myArray2); var CaixaTeorico, ObjetivoMensalTeorico; CaixaTeorico = FV(rate, lifeexpectancy, deposit, initial, 0); CaixaTeorico = CaixaTeorico * -1; ObjetivoMensalTeorico = PMT(rate, lifeexpectancy, CaixaTeorico * -1, future, 0); beginningBalance = endingBalance = initial; for (var a = 0; a <= periods; a++) { beginningBalance = endingBalance endingBalance = parseFloat(beginningBalance * (1 + rate) + deposit); myArrayB[a] = beginningBalance; } lastItem = myArrayB.pop(); beginningBalance2 = endingBalance2 = lastItem; for (var b = 0; b <= lifeexpectancy; b++) { beginningBalance2 = endingBalance2; endingBalance2 = parseFloat((beginningBalance2 - ObjetivoMensalTeorico) + (beginningBalance2 * rate)); if (endingBalance2 > future) { myArrayB2[b] = endingBalance2; } else { myArrayB2[b] = future; } } CenarioB = myArrayB.concat(myArrayB2); var CaixaTeorico, HerancaTeorica; CaixaTeorico = FV(rate, lifeexpectancy, deposit, initial, 0); CaixaTeorico = CaixaTeorico * -1; //Valor 1 HerancaTeorica = FV(rate, lifeexpectancy, payment * -1, CaixaTeorico, 0); HerancaTeorica = HerancaTeorica * -1; //Valor 1 beginningBalance = endingBalance = initial; for (var a = 0; a <= periods; a++) { beginningBalance = endingBalance endingBalance = parseFloat(beginningBalance * (1 + rate) + deposit); myArrayC[a] = beginningBalance; } lastItem = myArrayC.pop(); beginningBalance2 = endingBalance2 = lastItem; for (var b = 0; b <= lifeexpectancy; b++) { beginningBalance2 = endingBalance2; endingBalance2 = parseFloat((beginningBalance2 - payment) + (beginningBalance2 * rate)); if (endingBalance2 >= HerancaTeorica) { myArrayC2[b] = HerancaTeorica; } else { myArrayC2[b] = endingBalance2; } }
Humberto Junior
Curtir tópico
+ 0
Responder
Posts
07/02/2019
Rafael Bastiani
Oi, não sei se esta certo a lógica, mas gostaria de te deixar uma sugestão, procure por Clean Code, procure nomear suas variaveis de forma mais clara, as funções também, facilita para quem não conhece seu código.
Uma dica, não esta errado fazer assim, mas procure fora nas novas versões do JS, como a ES6 em diante, usando const, let e etc... se vc esta iniciando, foca nisso.
Uma dica, não esta errado fazer assim, mas procure fora nas novas versões do JS, como a ES6 em diante, usando const, let e etc... se vc esta iniciando, foca nisso.
Responder
Clique aqui para fazer login e interagir na Comunidade :)