1
resposta

Consolidando o conhecimento - Fiz uma simples calculadora de supermercado

Para testar meus conhecimentos fiz uma simples calculadora de supermercado.

O programa primeiramente pergunta ao cliente seu nome, informa que o frango está de promoção a R$14.99, coleta o nome da carne e o valor da mesma, para comparar com o preço do frango e informar na tela a diferença de preços.

Porém, queria saber se a função Math tem alguma propriedade que eu possa usar (sem ser o round, senão não exibe os centavos), para que traga o valor certinho?

<meta charset="UTF-8">

<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha;
    }

    function calcula(preco) {
        return (precoCarne - 14.99);
    }

    var nome = prompt("Olá, seja bem vindo. Qual é o seu nome?");
    alert(nome + ", hoje o frango Super Frango está de promoção! Está saindo a bandeja com 1kg a R$ 14,99.");
    var nomeCarne = prompt("Ah, gostou da carne? Vamos comparar o preço. Qual o nome da carne que quer comparar?");
    var precoCarne = prompt("Me diz também o preço do(da) " + nomeCarne + ".");

    var resultado = calcula(precoCarne);

    alert("O frango saindo a R$ 14,99, e o(a) " + nomeCarne + " saindo a R$ " + precoCarne + ", a diferença é de R$ " + Math.round(resultado) + " reais.");

</script>
1 resposta

Olá Hellan, primeiro gostaria de dizer que foi muito legal a sua ideia.

Tem 2 detalhes que podem tornar o seu programa melhor.

O primeiro é que se a gente colocar o valor de R$15,99 ele vai apresentar um erro porque o JavaScript segue o padrão americano de números, lá eles não usam a vírgula para contabilizar os centavos, eles usam o ponto.

Logo, se eu colocar R$15,99 ele vai retornar NaN (que significa Not a Number, ou seja, o sistema entendeu que os 15,99 não é um número logo ele não pode calcular).

Para solucionar esse problema você pode usar o método replace. Esse método busca pelo primeiro parâmetro, onde ele achar ele substitui pelo segundo parâmetro

Antes: var precoCarne = prompt("Me diz também o preço do(da) " + nomeCarne + ".");

Sugestão: var precoCarneSubstituido = precoCarne.replace(',', '.');

Agora uma observação amigo, precisamos transformar esse número vindo de precoCarneSubstituido em número novamente, porque o método replace transforma em string (letras), sem estar em número não conseguimos fazer contas.

Logo precisamos fazer o seguinte: var precoCarneConvertido = Number(precoCarneSubstituido);

O segundo detalhe estava na função calcula, você estava usando a variável externa para calcular a diferença e não o parâmetro passado.

Antes estava assim:

function calcula(preco) {
  return (precoCarne - 14.99);
}

A sugestão é que fique assim:

function calcula(preco) {
  return (preco - 14.99);
}

Para finalizar, sobre a sua dúvida de deixar apenas 2 casas decimais, podemos usar o método toFixed ou invés do Math.round:

Antes: Math.round(resultado)

Sugestão, porque esse método ele delimita os decimais em 2 casas: resultado.toFixed(2)

Resumindo, com essas alterações sugeridas o seu programa ficaria assim:

function pulaLinha() {
  document.write("<br>");
}

function mostra(frase) {
  document.write(frase);
  pulaLinha;
}

function calcula(preco) {
  return (preco - 14.99);
}

var nome = prompt("Olá, seja bem vindo. Qual é o seu nome?");

alert(nome + ", hoje o frango Super Frango está de promoção! Está saindo a bandeja com 1kg a R$ 14,99.");

var nomeCarne = prompt("Ah, gostou da carne? Vamos comparar o preço. Qual o nome da carne que quer comparar?");

var precoCarne = prompt("Me diz também o preço do(da) " + nomeCarne + ".");

var precoCarneSubstituido = precoCarne.replace(',', '.')
var precoCarneConvertido = Number(precoCarneSubstituido);

var resultado = calcula(precoCarneConvertido);

alert("O frango saindo a R$ 14,99, e o(a) " + nomeCarne + " saindo a R$ " + precoCarne + ", a diferença é de R$ " + resultado.toFixed(2) + " reais.");

Achei muito legal sua ideia Hellan, qualquer dúvida estou a disposição e se tiver sugestões pode mandar aqui a baixo pra a gente ir conversando e aprendendo mais juntos. Forte abraço!