Eu preciso de javascript para adicionar 5 a uma variável inteira, mas em vez disso ele trata a variável como uma string, então escreve a variável e, em seguida, adiciona 5 no final da "string". Como posso forçá-lo a fazer matemática em vez disso?
var dots = document.getElementById("txt").value; // 5
function increase(){
dots = dots + 5;
}
Resultado: 55
Como posso forçar a saída 10
?
javascript
string
math
addition
Sean
fonte
fonte
#control
fazem alguma diferença no seu problema? Caso contrário, exclua-os e não os mostre para nós. Continue reduzindo seu código até que você tenha o caso de teste mínimo absoluto necessário para reproduzir seu problema. Na maioria das vezes, isso fará com que você encontre o problema e aprenda no processo. Se você não resolver sozinho, é muito provável que obtenha ajuda rápida com seu exemplo simples.Respostas:
Você tem a linha
em seu arquivo, isso definirá os pontos como uma string porque o conteúdo do txt não está restrito a um número.
para convertê-lo em um int, altere a linha para:
Nota: O
10
aqui especifica decimal (base 10). Sem isso, alguns navegadores podem não interpretar a string corretamente. Veja MDN:parseInt
.fonte
o mais simples:
os pontos serão convertidos em números.
fonte
dots = +dots+5
.NÃO SE ESQUEÇA - Use
parseFloat();
se você estiver lidando com decimais.fonte
Number
.Estou adicionando esta resposta porque não a vejo aqui.
Uma maneira é colocar um caractere '+' na frente do valor
exemplo:
x === 15
Eu descobri que esta é a maneira mais simples
Neste caso, a linha:
pode ser alterado para
forçar a um número
NOTA:
fonte
parseInt()
deve fazer o truqueDa-te
http://www.w3schools.com/jsref/jsref_parseint.asp
Nota: O
10
inparseInt(number, 10)
especifica decimal (base 10). Sem isso, alguns navegadores podem não interpretar a string corretamente. Veja MDN:parseInt
.fonte
Isso também funciona para você:
fonte
é realmente simples, apenas
isso força o javascript a se multiplicar porque não há confusão para * sign in javascript.
fonte
Você pode adicionar + atrás da variável e isso a forçará a ser um número inteiro
fonte
Depois de tentar a maioria das respostas aqui sem sucesso para meu caso específico, eu vim com o seguinte:
Os sinais + são o que confundem js, e isso os elimina completamente. Simples de implementar, embora potencialmente confuso para entender.
fonte
ATUALIZADO desde a última votação negativa ....
Eu só vi a porção
antes, mas depois me foi mostrado que a
txt
caixa alimenta a variáveldots
. Por causa disso, você precisará ter certeza de "limpar" a entrada, para ter certeza de que ela contém apenas números inteiros, e não código malicioso.Uma maneira fácil de fazer isso é analisar a caixa de texto com um
onkeyup()
evento para garantir que ela tenha caracteres numéricos:onde o evento forneceria um erro e limparia o último caractere se o valor não for um número:
Obviamente, você também pode fazer isso com regex, mas escolhi o caminho mais preguiçoso.
Desde então, você saberia que apenas números podem estar na caixa, você deve ser capaz de usar apenas
eval()
:fonte
eval()
é perigoso sedots
for da entrada do usuário, principalmente se for da entrada armazenada. Mais informaçõesdots
era uma variável definida que estava sendo incrementada e apenas sendo confundida com uma string. Portanto, qualificarei minha resposta de que não deve ser usado levianamente, como você disse, a partir de entradas armazenadas / do usuário que podem ter o potencial para injeção de script maligno. Mas também neste caso, tal injeção causaria um erro / exceção matemático de qualquer maneira, então realmente não faria nada, de qualquer maneira.eval()
é muito perigoso, você precisa examinar o código no contexto que o OP estava usando. Não é, neste caso, porque ele está usando uma entrada que não vem de uma caixa de texto ou qualquer outra forma de entrada do usuário onde poderia haver qualquer forma de injeção de um valor não numérico! Eu gostaria de poder votar negativamente em seus votos negativos!eval()
está tudo bem e você precisa olhar para o contexto em que está sendo usado, em vez de apenas acreditar cegamente em tudo o que lê sem realmente entender!var dots = 5 function increase(){ dots = dots+5; }
não usa um campo de texto e atribui usando variáveis diretas, não da entrada do usuário. Então foi disso que eu saí. Mas eu vi que você está certo ao dizer que ele está atribuindo esse campo de textotxt
adots
, edots
é uma variável global, e é atualizado por essa entrada. Você está certo. Obrigado.