1
resposta

Dúvida no momento de soma na função

Olá, boa tarde!

Escrevi este código para praticar, porém na função de soma, o Java Script não faz a soma e sim apenas coloca os números juntos. Todas as outras operações funcionam normalmente. Onde está o erro? Não consegui encontrar.

<meta charset="UTF-8">

<script>

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

}

function mostra(texto2){
    document.write(texto2);
}

function mostraResultado(texto){
    document.write("O resultado " + texto + "!");
}

function somar(n1,n2){
    return n1+n2

}

function multiplicar(n3,n4){
    return n3*n4

}

function subtrair(n5,n6){
    return n5-n6

}

function dividir(n7,n8){
    return n7/n8

}

var nome = prompt("Olá, qual seu nome?");
var primeiroNumero = prompt(nome + " qual o primeiro número a ser calculado?");
var segundoNumero = prompt("e qual o segundo número que deve ser calculado com " + primeiroNumero + "?");

var resultadoMultiplicacao = multiplicar(primeiroNumero,segundoNumero);
var resultadoSoma = somar(primeiroNumero,segundoNumero);
var resultadoSubtracao = subtrair(primeiroNumero,segundoNumero);
var resultadoDivisao = dividir(primeiroNumero,segundoNumero);


mostra("<big>" + nome + " os resultados serão os seguintes: </big><hr>");
mostraResultado("da multiplicação entre " + primeiroNumero + " e " + segundoNumero +  " é igual a " + resultadoMultiplicacao);
pulaLinha(); 
mostraResultado("da soma entre " + primeiroNumero + " e " + segundoNumero +  " é igual a " + resultadoSoma);
pulaLinha();
mostraResultado("da subtração entre " + primeiroNumero + " e " + segundoNumero +  " é igual a " + resultadoSubtracao);
pulaLinha();
mostraResultado("da divisão entre " + primeiroNumero + " e " + segundoNumero + " é igual a " + resultadoDivisao + ", ou também arredondado para " + Math.round(resultadoDivisao));



</script>

Muito obrigado pela atenção!

Att, Manoel

1 resposta

Opa Manoel, tudo bem?

Então, no javascript, quando você pega do prompt ele tras como texto, por isso que ao somar ele entende o sinal de + como uma concatenação de textos mesmo, ele entende que você estaria fazendo isso aqui:

function somar(n1,n2) {
    return "1"+"1"
}

e ai o resultado é 11, nos outros casos ele tratou como numeros pois o sinal de concatenação é o + o resto ele efetuou a operação normal.

Para evitar esse problema podemos fazer a conversão(cast), que pode ser efetuada em dois lugares diferentes, uma é no proprio método que ficaria:

function somar(n1,n2) {
    return parseInt(n1) + parseInt(n2)
}

Mas como estamos lidando com numeros, o ideal seria que você convertesse logo no input do usuario:

var primeiroNumero = parseInt(prompt(nome + " qual o primeiro número a ser calculado?"));
var segundoNumero = parseInt(prompt("e qual o segundo número que deve ser calculado com " + primeiroNumero + "?"));

E ai seu código ficaria nota 10.

Ficou claro? Qualquer duvida estou a disposição.