Executando verificação de segurança...
1

Sei que é um exercício introdutório, mas ainda sim, acho que vale mencionar alguns pontos e aprofundar um pouco mais (o objetivo não é dizer que está errado, mas sim deixar um complemento que pode ser consultado depois, pois tudo sempre pode ser melhorado) :-)

Primeiro o arredondamento. Vale lembrar que toFixed arredonda os valores, o que pode ou não ser desejado. Além disso, toFixed retorna uma string (sei que o JavaScript faz coerções de tipo, mas se for usar TypeScript, por exemplo, deve ter esses detalhes em mente). Enfim, outra forma de truncar o valor para limitar a quantidade de casas decimais é ter uma função do tipo:

function truncar(valor, casas=2) {
    var fator = 10 ** casas;
    return Math.floor(valor * fator) / fator;
}

Assim ela não arredonda, veja a diferença:

var valor = 1.235;
console.log(valor.toFixed(2));  // toFixed arredonda:   1.24
console.log(truncar(valor, 2)); // agora não arredonda: 1.23

Quanto à formatação dos números, a linguagem já tem isso pronto. Basta usar o método toLocaleString:

function truncar(valor, casas=2) {
    var fator = 10 ** casas;
    return Math.floor(valor * fator) / fator;
}

var valorEmDolar = 64;
var cotacaoDoDolar = 5.32;
var valorEmReal = truncar(valorEmDolar * cotacaoDoDolar);
var texto = valorEmDolar.toLocaleString('pt-BR', { style: 'currency', currency: 'USD', currencyDisplay: 'narrowSymbol' })
            + ' são '
            + valorEmReal.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' });
console.log(texto); // $ 64,00 são R$ 340,48

O parâmetro pt-BR indica o locale que corresponde ao português do Brasil. Assim, ele já vai usar a vírgula como separador decimal, eliminando a necessidade do replace. Você pode usar outros, como por exemplo en-US (inglês americano), que o separador decimal muda automaticamente para o ponto.

E as demais opções servem para formatar valores monetários. Basta mudar o currency para a moeda desejada, que o respectivo símbolo será colocado. No caso do dólar, também adicionei o narrowSymbol para que seja somente $ (sem isso, ele mostra US$). Não deixe de ler a documentação para ver todas as opções possíveis.


E na verdade nem precisava da função truncar. Quando usamos o style: 'currency', ele usa a quantidade de casas decimais definido pela ISO 4217 - veja que tanto real (BRL) quanto dólar (USD) usam dois dígitos.

Mas isso pode ser mudado usando propriedades adicionais. Por exemplo, no mercado financeiro é comum trabalhar com 3 casas decimais, então bastaria trocar para:

// mostra o valor com 3 casas decimais
valorEmReal.toLocaleString('pt-BR', { style: 'currency', currency: 'BRL', minimumFractionDigits: 3, maximumFractionDigits: 3 });

E claro, vale a dica final, de que os números de ponto flutuante não são os mais adequados para valores monetários, devido a seus inúmeros problemas de precisão (Nubank que o diga). Mas aí é outra história...

Carregando publicação patrocinada...