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

Não consigo somar apenas concatenar

Olá, estou tentando fazer com que o meu programa some os números digitados, mas ele esta apenas concatenando os dois. O que eu fiz errado?

<meta charset="utf-8">



<script>

function pulaLinha() {

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

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

function soma(x, y) {

    return x + y;    
}    

var numeroUm = prompt("Digite um número");
var numeroDois = prompt("Digite outro número");

var juncaoDosDois = soma(numeroUm, numeroDois);

mostra("A soma dos números da  "+ juncaoDosDois);


</script>
2 respostas

Você esqueceu de transformar os números pra inteiro. O prompt retorna uma string, por isso que tá concatenando.

var numeroUm = parseInt(prompt("Digite um número")); var numeroDois = parseInt(prompt("Digite outro número"));
solução!

Bruno, o JavaScript aparentemente fica confuso porque o sinal "+" serve tanto para concatenar quanto para somar. Se você estivesse tentando realizar uma subtração, divisão ou multiplicação, ele ia fazer na boa, mas com a soma ele enfrenta esse dilema: "encaro os números captados no prompt como string (texto) ou como numeral?". E ele acaba decidindo encarar como string.

Um jeito de explicar a ele que aquele valor se trata de um número é usando a seguinte função nativa do JavaScript

parseInt()

É como se ela significasse "parse as integer". Traduzindo para o português, "analisar como número inteiro". Com ela você poderia avisar para o JS interpretar como numeral o valor inserido pelo usuário logo no prompt, colocando ele dentro da função parseInt(), embora pudesse fazer isso já dentro da função. Ficaria então:

var numeroUm = parseInt(prompt("Digite um número"));
var numeroDois = parseInt(prompt("Digite outro número"));

Outro jeito (pior semântica) de fazer isso seria, em vez de avisar, induzir o JavaScript a saber que se tratava de um número. Para isso, você poderia multiplicar os valores por 1. Se você fez uma operação de multiplicação, ele já não tem mais dúvida se é uma string ou um número:

var numeroUm = 1 * prompt("Digite um número");
var numeroDois = 1 * prompt("Digite outro número");

se quiser assistir à aula completa sobre essa sua dúvida, está no curso de Lógica de programação I, Aula 6, unidade 01, aqui no Alura.

Espero ter ajudado. Abraço!