Estou adicionando dois números, mas não recebo o valor correto.
Por exemplo, fazer 1 + 2
retornos 12 e não 3
O que estou fazendo de errado neste código?
function myFunction() {
var y = document.getElementById("txt1").value;
var z = document.getElementById("txt2").value;
var x = y + z;
document.getElementById("demo").innerHTML = x;
}
<p>
Click the button to calculate x.
<button onclick="myFunction()">Try it</button>
</p>
<p>
Enter first number:
<input type="text" id="txt1" name="text1" value="1">
Enter second number:
<input type="text" id="txt2" name="text2" value="2">
</p>
<p id="demo"></p>
javascript
html
okconfused
fonte
fonte
<input type="number">
, pode simplesmente obter sua.valueAsNumber
propriedade diretamente.Respostas:
Na verdade, são strings, não números. A maneira mais fácil de produzir um número a partir de uma string é acrescentá-lo com
+
:fonte
+
prefixo-faz com as strings?Eu apenas uso
Number()
:fonte
var k += Number(i)
Você precisa usar o
parseInt()
método javaScript para transformar as strings novamente em números. No momento, eles são strings; portanto, a adição de duas strings concatena-as, e é por isso que você está recebendo "12".fonte
parseInt()
é a melhor opção aqui, já que a função do OP está adicionando dois "números" inseridos pelo usuário, não dois "números inteiros".parseFloat
se o OP fornecer mais informações.parseInt()
só retorna números inteiros e não explica nenhuma dasparseInt()
"peculiaridades" de s - o que pode ser um problema com os dados inseridos pelo usuário - eu pensei que valia a pena mencionar. (Eu realmente não downvote ou qualquer coisa.)Use parseInt (...), mas certifique-se de especificar um valor de raiz; caso contrário, você encontrará vários bugs (se a sequência começar com "0", a raiz será octal / 8 etc.).
Espero que isto ajude!
fonte
parseInt()
é a melhor opção aqui, já que a função do OP está adicionando dois "números" inseridos pelo usuário, não dois "números inteiros".parseInt("012")
funciona bem, retornando 12. Claro, você ainda precisa tomar cuidado com coisas como[1,2].map(parseInt)
.Basta adicionar um método de conversão de tipo simples, pois a entrada é inserida em texto. Use o seguinte:
fonte
O seguinte pode ser útil em termos gerais.
Primeiro, os campos do formulário HTML são limitados ao texto . Isso se aplica especialmente às caixas de texto, mesmo que você tenha se esforçado para garantir que o valor pareça um número.
Segundo, o JavaScript, para o bem ou para o mal, sobrecarregou o
+
operador com dois significados: adiciona números e concatena as strings. Tem uma preferência por concatenação, portanto, mesmo uma expressão como3+'4'
será tratada como concatenação.Terceiro, o JavaScript tentará alterar os tipos dinamicamente, se puder, e se for necessário. Por exemplo
'2'*'3'
, os dois tipos serão alterados para números, pois você não pode multiplicar cadeias. Se um deles for incompatível, você receberáNaN
, Não é um número.Seu problema ocorre porque os dados provenientes do formulário são considerados como uma seqüência de caracteres e
+
, portanto, concatenam em vez de adicionar.Ao ler dados supostamente numéricos de um formulário, você deve sempre enviá-los
parseInt()
ouparseFloat()
, dependendo se você deseja um número inteiro ou um decimal.Observe que nenhuma das funções converte verdadeiramente uma seqüência de caracteres em um número. Em vez disso, ele analisará a sequência da esquerda para a direita até chegar a um caractere numérico inválido ou até o final e converterá o que foi aceito. No caso de
parseFloat
, isso inclui um ponto decimal, mas não dois.Qualquer coisa após o número válido é simplesmente ignorada. Eles falham se a string nem começa como um número. Então você receberá
NaN
.Uma boa técnica de propósito geral para números de formulários é algo como isto:
Se você estiver preparado para combinar uma sequência inválida a 0, poderá usar:
fonte
Simples
fonte
Isso não resume o número; em vez disso, concatenará:
Você precisa fazer:
Você deve usar parseInt para especificar a operação nos números. Exemplo:
fonte
addition
esubtraction
não a aceita.Este código soma as duas variáveis! Coloque-o em sua função
fonte
Está faltando a conversão de tipo durante a etapa de adição ...
var x = y + z;
deve servar x = parseInt(y) + parseInt(z);
fonte
fonte
É muito simples:
fonte
Tente o seguinte:
fonte
fonte
Se tivermos dois campos de entrada, obtenha os valores dos campos de entrada e adicione-os usando JavaScript.
fonte
Você pode fazer um pré-cheque com a expressão regular enquanto são números, como
fonte
Use
parseFloat
-o para converter string em número, incluindo valores decimais.fonte
Você também pode escrever: var z = x - -y; E você obtém a resposta correta.
fonte
Aqui vai o seu código analisando as variáveis na função.
Responda
fonte
Uma solução alternativa, apenas compartilhando :):
fonte