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

Imersão Dev - Aula 1 | Expandindo os Conhecimentos

Olá a todos. Como sabem, essa semana, está rolando a Imersão Dev, e tivemos a primeira aula, então, iremos expandir os conhecimentos.

Os desafios não serão mostrados nesse tutorial, mas você pode expandir esses conhecimentos para refazer os desafios.

Código

O Código entregue no final da aula foi:

var valorEmDolar = 64;
var cotacaoDoDolar = 5.32;

var valorEmReal = valorEmDolar * cotacaoDoDolar;
valorEmReal = valorEmReal.toFixed(2);
alert("R$ " + valorEmReal);

Conteúdos

  • Mais Detalhes no Alerta
  • Usando o toFixed novamente
  • Estilizando Os Números

Mais Detalhes no Alerta

No final da aula, aprendemos sobre Concatenação, que é um jeito de juntarmos o valores de duas variáveis através do operador +.

A Ideia

Pessoalmente, achei que faltou mostrar quantos dólares está sendo convertido. Ao final, queremos mostrar algo como $64 são R$340.48.

A Implementação

Para implementarmos, usaremos a mesma técnica de concatenação. Para isso, colocaremos:

alert("$" + valorEmDolar + " são R$" + valorEmReal);

Note que pessoalmente, não gosto do espaço entre o cifrão e o valor, então decidi deixar sem, mas isso é apenas estética. Você pode mudar como quiser :)

Usando o toFixed novamente

Como foi apresentado na aula, o comando toFixed serve para diminuirmos as casas decimais de um valor.

A Ideia

Perceba que, agora, que estamos mostrando o valor em dolar também, esse valor não está com uma vírgula depois do 64. Para fins estéticos, vamos mostrar esse valor com uma vírgula, seguido de dois zeros ao lado, para termos uma resposta assim: $64.00 são R$340.48

A Implementação

Para implementarmos essa estilização, vamos declarar uma nova variável valorEmDolarDecimal, que vai servir para mostrar o valor na tela.
Além disso, vou declarar uma nova variável chamada texto, que vai servir apenas para tirar todas essas concatenações de dentro do alerta.

var valorEmDolarDecimal = valorEmDolar.toFixed(2);
var texto = "$" + valorEmDolarDecimal + " são R$" + valorEmReal;
alert(texto);

Estilizando Os Números

Como foi apresentado na aula, em um número decimal, a parte inteira da parte decimal é separada por um ponto, diferentemente do jeito que estamos habituados a fazer, que é com vírgulas. Mas, perceba que quando mostramos os valores para o usuário, estamos mostando-os com ponto.

A Ideia

Vamos trocar as ocorrências de todos os pontos por vírgulas de nossos números. Queremos que ao final, tenhamos uma mensagem assim: $64,00 são R$340,48

A Implementação

Para a implementação, faremos algo parecido quando colocamos os zeros na frente do Dólar. mas, ao invés de usar toFixed, usaremos replace, que é para substituir a ocorrência de um caractere por outro. Precisamos colocar dois valores dentro dos parênteses. O primeiro valor será o(s) caractere(s) a ser buscasdo(s), que no nosso caso, é o ponto. O segundo valor é o(s) caractere(s) a ser colocado(s) que no nosso caso, será uma virgula. Perceba que, então, precisamos passar dois parâmetros para funcionar corretamente . Para o JavaScript saber qual o primeiro valor e qual o segundo valor, separamos-o por meio de uma vírgula.

var valorEmRealEstilizado = valorEmReal.replace(".", ",");
var valorEmDolarEstilizado = valorEmDolarDecimal.replace(".", ",");
var texto = "$" + valorEmDolarEstilizado + " são R$" + valorEmRealEstilizado;
alert(texto);

Peceba que estamos estilizando tanto o valor em dólar quanto o valor em real.

Sobre Mim 🐘

Me Chamo Erick. Desenvolvedor PHP (Symfony).

Carregando publicação patrocinada...
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...