Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Calculando percentuais

Criei um código pra calcular a porcentagem de votos brancos, nulos e válidos de acordo com o valor informado pelo usuário. No entanto, quando fui testar, ao colocar o total de eleitores como 100, votos em branco 36, nulos 36 e válidos 28, a porcentagem de números válidos não dá 28% exatos. O navegador mostra 28.000000000000004%. Gostaria de saber o porquê disso, já que 36 +36 + 28 = 100. Achei que usando valores que somam 100, não haveria necessidade de utilizar o Math.round.

<meta charset="UTF-8">

<script>

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

    function mostra(frase) {

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

    function calculaPercentual(a, b) {

        percentual = a/b * 100;
        return percentual;
    }

    var totalDeEleitores = parseInt(prompt("Informe o número total de eleitores:"));
    var totalBrancos = parseInt(prompt("Informe o número de votos em branco:"));
    var totalNulos = parseInt(prompt("Informe o número de votos nulos:"));
    var totalValidos = parseInt(prompt("Informe o número de votos válidos"));

    mostra("O percentual de votos em branco é de " + calculaPercentual(totalBrancos, totalDeEleitores) + "%");
    mostra("O percentual de votos nulos é de " + calculaPercentual(totalNulos, totalDeEleitores) + "%");
    mostra("O percentual de votos válidos é de " + calculaPercentual(totalValidos, totalDeEleitores) + "%");




</script>
1 resposta
solução!

Assim como a representação decimal não consegue representar alguns números, com 1/3, gerando dizimas periódicas, a mesma coisa pode acontecer quando tentamos representar um número em binário, dessa forma o JS faz um arredondamento interno, nos casos que não aparecem todas essas casas decimais, o arredondamento foi feito pra baixo, eliminando as casas desnecessárias, já no caso que elas aparecem, o número mais próximo era acima, gerando essa incoerência.