Article image
FRANCISCO ALVES
FRANCISCO ALVES17/01/2024 00:47
Compartilhe

Diferença entre ** e ^ em Javascript

  • #JavaScript

No Desafio Cálculo de fórmula de juros compostos a fórmula apresentada no Desafio é:

Montante = Investimento Inicial * (1 + Taxa de Juros Mensal) ^ Período em Meses

Porém dessa forma o resultado apresentado não é o esperado para o Desafio.

O correto seria:

Montante = Investimento Inicial * (1 + Taxa de Juros Mensal) ** Período em Meses.

A diferença está na utilização do operador exponencial **:

O operador exponencial ** retorna o resultado da elevação do primeiro operando à potência do segundo operando. É equivalente a Math.pow(), exceto que também aceita BigInts como operandos.

Algumas linguagens de programação usam o símbolo circunflexo ^ para exponenciação, mas o JavaScript usa esse símbolo para o operador XOR bit a bit.

Por exemplo:

const result1 = 1.07 ^ 3; // 2.000000

const result3 = Number(1.07 ** 3); // 1.2250431889138477

const result2 = Math.pow(1.07, 3); // 1.2250431889138477

Compartilhe
Comentários (3)
FRANCISCO ALVES
FRANCISCO ALVES - 23/01/2024 15:52

Tirando a dúvida do Stevan Padilha.


Para alterar a fórmula para adicionar um valor fixo mensal ficaria assim:

taxaJurosMensal = taxaJurosMensal / 100;

const montante = (investimentoInicial * ((1 + taxaJurosMensal) ** periodoMeses)) + (valorFixoMensal * ((((1 + taxaJurosMensal) ** periodoMeses) - 1) / taxaJurosMensal));


Fica confuso devido ao tamanho então você pode quebrar em duas partes.

let montante = investimentoInicial * ((1 + taxaJurosMensal) ** periodoMeses);

montante += valorFixoMensal * ((((1 + taxaJurosMensal) ** periodoMeses) - 1) / taxaJurosMensal);


em JavaScript:

function calcularMontante(investimentoInicial, taxaJurosMensal, periodoMeses, valorFixoMensal) {
 taxaJurosMensal = taxaJurosMensal / 100;
 let montante = (investimentoInicial * ((1 + taxaJurosMensal) ** periodoMeses)) + (valorFixoMensal * ((((1 + taxaJurosMensal) ** periodoMeses) - 1) / taxaJurosMensal));

 return montante;
}

const contaBancaria = {
 investimentoInicial: parseFloat(0),
 taxaJurosMensal: parseFloat(0),
 periodoMeses: parseInt(0),
 valorFixoMensal: parseInt(0)
};

contaBancaria.investimentoInicial = parseFloat(1000.00);
contaBancaria.taxaJurosMensal = parseFloat(10);
contaBancaria.periodoMeses = parseInt(12);
contaBancaria.valorFixoMensal = parseInt(100);

const montante = calcularMontante(contaBancaria.investimentoInicial, contaBancaria.taxaJurosMensal, contaBancaria.periodoMeses, contaBancaria.valorFixoMensal);

console.log("Investimento: " + contaBancaria.investimentoInicial.toFixed(2));
console.log("Juros: " + contaBancaria.taxaJurosMensal);
console.log("Período: " + contaBancaria.periodoMeses);
console.log("Resultado: " + montante.toFixed(2));
Mairê Machado
Mairê Machado - 17/01/2024 09:59

Muito interessante! Gostei da dica! 👏

Stevan Padilha
Stevan Padilha - 17/01/2024 09:59

Muito bacana Francisco, li o seu artigo e resolvi brincar um pouco. Será que tem um jeito de adicionar nessa fórmula abaixo, um valor fixo por mês para, para fazer juros compostos?

Montante = Investimento Inicial * (1 + Taxa de Juros Mensal) ** Período em Meses.


Eu fiz o seguinte código para chegar no resultado que falei, mas é um código um pouco mais extenso utilizando for.

const valorInicial = 100
const taxaDeJuros = 0.01
const tempo = 480
const valorMensal = 100

let montante = 0 

for (let i = 0; i < tempo; i++) {
  montante += valorInicial;
  montante *= (1 + taxaDeJuros)
  montante += valorMensal
}

console.log(montante.toLocaleString('pt-br', {style: 'currency', currency: 'BRL'}))

R: R$ 2.364.719,27