Como adicionar duas strings como se fossem números?

Eu tenho duas cadeias que contêm apenas números:

var num1 = '20', num2 = '30.5'; 

Eu teria esperado que eu pudesse adicioná-los juntos, mas eles estão sendo concatenados em vez disso:

 num1 + num2; // = '2030.5' 

Como posso forçar essas strings a serem tratadas como números?

Eu usaria o operador unário plus para convertê-los em números primeiro.

 +num1 + +num2; 

MDN docs para parseInt
MDN docs para parseFloat

Em parseInt, o radix é especificado como dez, de modo que estamos na base 10. No javascript não-estrito, um número prefixado com 0 é tratado como octal. Isso obviamente causaria problemas!

 parseInt(num1, 10) + parseInt(num2, 10) //base10 parseFloat(num1) + parseFloat(num2) 

Veja também a resposta do ChaosPandion para um atalho útil usando um operador unário . Eu configurei um violino para mostrar os diferentes comportamentos.

http://jsfiddle.net/EtX6G/

 var ten = '10'; var zero_ten = '010'; var one = '1'; var body = document.getElementsByTagName('body')[0]; Append(parseInt(ten) + parseInt(one)); Append(parseInt(zero_ten) + parseInt(one)); Append(+ten + +one); Append(+zero_ten + +one); function Append(text) { body.appendChild(document.createTextNode(text)); body.appendChild(document.createElement('br')); } 

Eu recomendaria usar o operador unário plus, para forçar uma sequência a ser tratada como número, dentro de parênteses, para tornar o código mais legível como o seguinte:

 (+varname) 

Então, no seu caso, é:

 var num1 = '20', num2 = '30.5'; var sum = (+num1) + (+num2); // Just to test it console.log( sum ); // 50.5 
 var result = Number(num1) + Number(num2); 

converta as strings para floats com parseFloat(string) ou para integers com parseInt(string)

Você pode usar isso para adicionar números:

 var x = +num1 + +num2; 

Se você precisar adicionar duas strings juntas, que são números muito grandes, você precisará avaliar a adição em cada posição da string:

 function addStrings(str1, str2){ str1a = str1.split('').reverse(); str2a = str2.split('').reverse(); let output = ''; let longer = Math.max(str1.length, str2.length); let carry = false; for (let i = 0; i < longer; i++) { let result if (str1a[i] && str2a[i]) { result = parseInt(str1a[i]) + parseInt(str2a[i]); } else if (str1a[i] && !str2a[i]) { result = parseInt(str1a[i]); } else if (!str1a[i] && str2a[i]) { result = parseInt(str2a[i]); } if (carry) { result += 1; carry = false; } if(result >= 10) { carry = true; output += result.toString()[1]; }else { output += result.toString(); } } output = output.split('').reverse().join(''); if(carry) { output = '1' + output; } return output; } 

experimentar

 var x = parseFloat(num1) + parseFloat(num2) ; 

ou, dependendo das suas necessidades:

 var x = parseInt(num1) + parseInt(num2) ; 

http://www.javascripter.net/faq/convert2.htm

Você pode querer pegar o livro Javascript: The Good Parts , de Douglas Crockford. Javascript tem uma quantidade considerável de pegadinhas! Este livro vai um longo caminho para esclarecê-los. Veja também

e excelente ensaio do Sr. Crockford, Javascript: Linguagem de programação mais incompreendida do mundo .

Eu sempre subtrai zero.

 num1-0 + num2-0; 

Admite-se que o método do operador unário é um personagem a menos, mas nem todo mundo sabe o que é um operador unário ou como procurar no Google quando ele não sabe o que é chamado.

Se você quiser realizar operações com números como strings (como no caso de números maiores que 64bits), você pode usar a biblioteca big-integer .

 const bigInt = require('big-integer') bigInt("999").add("1").toString() // output: "1000" 

function sum () {

 var x,y,z; x = Number(document.getElementById("input1").value); y = Number(document.getElementById("input2").value); z = x + y; document.getElementById("result").innerHTML = z ; 

}

Você pode usar parseInt para analisar uma string para um número. Para estar no lado seguro das coisas, sempre passe 10 como o segundo argumento para analisar na base 10.

 num1 = parseInt(num1, 10); num2 = parseInt(num2, 10); alert(num1 + num2); 

Use o método parseFloat para analisar as cadeias em números de ponto flutuante:

 parseFloat(num1) + parseFloat(num2) 

Certifique-se de arredondar sua resposta final para menos de 16 casas decimais para floats, já que o script java está com bugs.

Por exemplo, 5 – 7,6 = -2,5999999999999996

Eu uso isso no meu projeto. Eu uso + sinal para tratar string como um número (na variável with_interesst)

  

You Can Use This Calculator Before Submit

Loan Amount: PHP

Interest Rate: %

Term

Espero que ajude

Você pode usar assim:

 var num1 = '20', num2 = '30.5'; alert((num1*1) + (num2*1)); //result 50.5 

Quando aplicar * 1 em num1, converta um número em string.

se num1 contiver uma letra ou uma vírgula, retorna NaN multiplicando por 1

se num1 é nulo, num1 retorna 0

Atenciosamente!!!

Tente isso se você estiver procurando por um código Javascript simples e quiser usar duas checkboxs de input e adicionar números dos dois valores. Aqui está o código.

  Enter the first number: 
Enter the seccond number:

Para mais detalhes, visite http://informativejavascript.blogspot.nl/2012/12/javascript-basics.html