Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Resultado não retorna correto

Olá! Estou com uma dúvida neste código. Consegui fazer a alteração e ele funciona perfeitamente. Entretanto, quando digito os valores quebrados, ele retorna como média um valor inteiro. Foi criado um tópico anterior com essa mesma dúvida, mas ele aparece como solucionado, mas eu não vi a solução.

O código é:

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    var totalDeEventos = parseInt(prompt("Informe o total de eventos"));

    var contador = 1;
    var totalGastoComEventos = 0;

    while(contador <= totalDeEventos) {

        //var totalGastoComEventos = 0;
        var gasto = parseFloat(prompt("Informe total gasto com evento"));
        totalGastoComEventos = totalGastoComEventos + gasto;
        contador++;
    }

    var media = totalGastoComEventos / totalDeEventos;

    mostra("A média de gastos é " + media);
</script>

Os dados de entrada que estou usando são:

totalDeEventos = 2;
gasto1 = 250,75;
gasto2 = 300,00;

O valor retornado pelo programa como média é R$ 275,00, quando na verdade deveria ser R$ 275,375. Como resolver??

Obrigada!!

5 respostas
solução!

Olá Lys,

O problema parece estar na forma como você está inserindo os dados; nesse caso você está digitando os números com 'vírgula':

totalDeEventos = 2;
gasto1 = 250,75;
gasto2 = 300,00;

// retorna 275

Porém se você substituir a 'virgula' por 'ponto' no momento de digitar no prompt, irá funcionar:

totalDeEventos = 2;
gasto1 = 250.75;
gasto2 = 300.00;

// retorna 275.375

Em JavaScript números decimais (float) são separados com 'ponto' e não 'vírgula'.

Obrigada Sebastião! Inseri os valores com ponto e o resultado saiu correto. Você sabe me dizer porque isso acontece? Ao meu ver então, quando digitamos os valores com a vírgula ele ignora o que vem depois da vírgula e faz o cálculo... Sei lá... Não deveria simplesmente dar um erro já que a escrita dos valores não está sendo feita corretamente??

Mais uma vez, obrigada!!

Olá, isso acontece por ser uma questão cultural. No Brasil usamos a vírgula e nos EUA usam o ponto como separador, É um Padrão Regional.

Mas isso não deve ser um problema. Você pode usar o método replace (old , new) . Desta forma você transforma o valor recebido com a virgula para ponto, faz o conta e exibe o valor de volta .

Dá uma ohada: https://www.w3schools.com/jsref/jsref_replace.asp

Olá Lys,

É como o Sérgio disse, o Javascript separa os valores decimais com ponto e não vírgula, seguindo o padrão internacional. Ao invés de retornar um erro, o Javascript 'quebra um galho' ignorando o que vem após a vírgula e realizando a operação. Você pode alterar o seu código pra aceitar vírgula através do método replace, dá seguinte forma:

// Código anterior
var gasto = parseFloat(prompt("Informe total gasto com evento").replace(",", ".");
// Código posterior

Obrigada, Sérgio e Sebastião!

Entendi tudo e alterei o programa para imprimir o resultado e deu tudo certo!

:-)