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

Dúvida sobre o usuário poder inserir um número real. (IGNOREM, MARQUEI COMO RESOLVIDO SEM QUERER)

Primeiramente, este foi o código que digitei. Eu fiquei bem satisfeito, apesar de ter atolado em algumas partes kkkk. Mas é da vida!

Dúvida abaixo do código...

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

    function pularLinha() {

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

    function mostrar(frase) {

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

    function sorteia(n) {

        return Math.round(Math.random() * n);
    }

    var numeroSorte = sorteia(10);
    console.log(numeroSorte);

    var chuteUsuario = parseInt(prompt("Chute um número de 0 a 10:"));

    if (chuteUsuario == numeroSorte) {

        mostrar("Parabéns, você acertou! O número sorteado pelo computador foi " + numeroSorte + " =)");

    } else {

        if (chuteUsuario > numeroSorte) {

            mostrar("Que pena, o número que você chutou é maior do que o sorteado pelo computador =(");
            mostrar("O número que o computador sorteou foi " + numeroSorte + ".");

        } else {

            mostrar("Que pena, o número que você chutou é menor do que o sorteado pelo computador =("); 
            mostrar("O número que o computador sorteou foi " + numeroSorte + ".");
        }

    }

</script>

Bom, quando chamo o prompt, antes dele, eu especifico que quero um número inteiro através do parseInt correto? Mas, e seu exibisse para o usuário a seguinte mensagem: "Chute um número real igual ou menor que 10", como eu faria isso? Tem alguma função no JS que me permita trabalhar com números reais? Detalhe, tem que funcionar do mesmo jeito tanto pra quando o usuário digitar um inteiro ou um número com vírgula (claro, estou ciente que é usado o ponto no lugar da vírgula).

Só uma observação, eu ainda estou aprendendo a lógica de programação então, tente me explicar de uma forma condizente com conhecimento de alguém que está dando os primeiros passos ok!? Desde de já sou grato pela compreensão.

2 respostas
solução!

Fala Vinicius, Tudo bem?

Fiz algumas alterações tentando chegar no resultado que eu entendi que você queria na dúvida enviada.

Comentei as linhas que alterei no código tentando deixar claro o meu raciocínio para chegar no resultado final.

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

    function pularLinha() {

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

    function mostrar(frase) {

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

    function sorteia(n) {
        // criei uma variável para receber o numero sorteado, sem arredondar com a função Round()
        var sorteado = Math.random() * n;

        // estou retornando, como resultado final da função, o número sorteado
        // fixei o número de casas decimais para 1 através do método 'toFixed' passado 1 como parâmetro indicando que quero apenas 1 casa decimal
        // usei o método para strings 'replace' e informei para o javascript alterar tudo que for '.' para ','
        return sorteado.toFixed(1).replace('.',',')
    }

    var numeroSorte = sorteia(10);
    console.log(numeroSorte);

    // como o JS já transformou o resultado do número sorteado para string (utilizando o toFixed já altera o tipo numero para tipo string) eu retirei a função que transforma o numero digitado para tipo number
    // todo prompt recebido é uma string. Então não mudei mais nada no código. A comparação lógica vai ser string == string
    var chuteUsuario = prompt("Chute um número de 0 a 10:");
    console.log(chuteUsuario)
    if (chuteUsuario == numeroSorte) {

        mostrar("Parabéns, você acertou! O número sorteado pelo computador foi " + numeroSorte + " =)");

    } else {

        if (chuteUsuario > numeroSorte) {

            mostrar("Que pena, o número que você chutou é maior do que o sorteado pelo computador =(");
            mostrar("O número que o computador sorteou foi " + numeroSorte + ".");

        } else {

            mostrar("Que pena, o número que você chutou é menor do que o sorteado pelo computador =("); 
            mostrar("O número que o computador sorteou foi " + numeroSorte + ".");
        }

    }

</script>

Abraço.

Fala camarada! Então, não é bem isso que eu queria, pois por exemplo, eu abri o programa e no console vi que o número sorteado era 7,0, assim, eu digitei 7 como chute, só que, o programa me mostrou que eu havia errado. Vou tentar reformular as perguntas pois acho que não fui muito feliz nas anteriores haha.

1) Eu quero saber se há uma função que converta qualquer número que o usuário digitar através do prompt para número real. Da mesma forma que o parseInt converte para número inteiro, quero saber se tem outra função que converta para um número real, ou seja, número com vírgula mas, não literalmente com vírgula.

*Quando estudei um pouquinho de python 3, tinha uma função chamada "float", que, se eu digitasse 1, por exemplo, através da interação com o usuário, ela convertia esse 1 para 1.0.

2) Daí digamos que o programa sorteie o número 7.0 e eu digite apenas 7, logo, eu devo acertar pois matematicamente falando, 7 possui o mesmo valo de 7.0. Claro que se o programa sortear por exemplo 3.1, aí eu vou ter que digitar exatamente 3.1 mesmo!

Percebi também que pedir para o usuário poder digitar qualquer número real menor ou igual a dez é loucura de mais pois ele simplesmente poderia escrever 0.97438765873 ou qualquer outro que seria impossível de acertar. Então acho melhor especificar que o prompt pedirá ao usuário que digite um número real de no máximo uma casa decimal que seja menor ou igual a dez. Assim, ele não poderá digitar um número como 0.76 ou 0.93764, somente 0.7 ou 0.9.

Desculpe pelo trabalhão!