Necesito javascript para agregar 5 a una variable entera, pero en su lugar trata la variable como una cadena, por lo que escribe la variable, luego agrega 5 al final de la "cadena". ¿Cómo puedo obligarlo a hacer matemáticas?
var dots = document.getElementById("txt").value; // 5
function increase(){
dots = dots + 5;
}
Salida: 55
¿Cómo puedo forzar su salida 10
?
javascript
string
math
addition
Sean
fuente
fuente
#control
hacen alguna diferencia en su problema? Si no es así, bórrelos y no nos los muestre. Continúe reduciendo su código hasta que tenga el caso de prueba mínimo absoluto necesario para reproducir su problema. La mayoría de las veces, hacerlo hará que encuentre el problema y aprenda en el proceso. Si no lo resuelve usted mismo, es muy probable que obtenga ayuda rápida con su ejemplo simple.Respuestas:
Tienes la linea
en su archivo, esto hará que los puntos sean una cadena porque el contenido de txt no está restringido a un número.
para convertirlo en un int cambie la línea a:
Nota:
10
Aquí se especifica decimal (base-10). Sin esto, es posible que algunos navegadores no interpreten la cadena correctamente. Ver MDN:parseInt
.fuente
lo más simple:
los puntos se convertirán en números.
fuente
dots = +dots+5
.NO OLVIDE - Úselo
parseFloat();
si está tratando con decimales.fuente
Number
.Estoy agregando esta respuesta porque no la veo aquí.
Una forma es poner un carácter '+' delante del valor
ejemplo:
x === 15
He descubierto que esta es la forma más sencilla
En este caso, la línea:
podría cambiarse a
para forzarlo a un número
NOTA:
fuente
parseInt()
debería hacer el trucoTe dio
http://www.w3schools.com/jsref/jsref_parseint.asp
Nota: La
10
enparseInt(number, 10)
especifica decimal (base-10). Sin esto, es posible que algunos navegadores no interpreten la cadena correctamente. Ver MDN:parseInt
.fuente
Esto también funciona para ti:
fuente
es realmente simple solo
esto obliga a que javascript se multiplique porque no hay confusión para * iniciar sesión en javascript.
fuente
Puede agregar + detrás de la variable y la obligará a ser un número entero
fuente
Después de probar la mayoría de las respuestas aquí sin éxito para mi caso particular, se me ocurrió esto:
Los signos + son los que confunden a js, y esto los elimina por completo. Simple de implementar, aunque potencialmente confuso de entender.
fuente
ACTUALIZADO desde la última vez que se votó en contra ...
Solo vi la porción
antes, pero luego se me mostró que la
txt
caja alimenta la variabledots
. Debido a esto, deberá asegurarse de "limpiar" la entrada, para asegurarse de que solo tenga números enteros y no código malicioso.Una forma fácil de hacerlo es analizar el cuadro de texto con un
onkeyup()
evento para asegurarse de que tenga caracteres numéricos:donde el evento daría un error y borraría el último carácter si el valor no es un número:
Obviamente, también podrías hacer eso con expresiones regulares, pero tomé el camino perezoso.
Desde entonces, sabría que solo los números podrían estar en el cuadro, debería poder usar
eval()
:fuente
eval()
es peligroso sidots
proviene de la entrada del usuario, especialmente si proviene de la entrada almacenada. Más informacióndots
era una variable definida que se incrementaba y se confundía con una cadena. Así que calificaré mi respuesta de que no debe usarse a la ligera, como dijiste, a partir de la entrada almacenada / del usuario que podría tener el potencial de una inyección de scripts malvados. Pero también en este caso, dicha inyección causaría un error / excepción matemática, de todos modos, por lo que realmente no haría nada, de cualquier manera.eval()
es muy peligroso, deben mirar el código en el contexto que estaba usando el OP. No es, en este caso, porque está usando una entrada que no proviene de un cuadro de texto o de cualquier otra forma de entrada del usuario donde podría haber alguna forma de inyección de un valor no numérico. ¡Ojalá pudiera rechazar sus votos negativos!eval()
está bien y necesitas mirar el contexto en el que se está usando, en lugar de creer ciegamente todo lo que lees sin entenderlo realmente.var dots = 5 function increase(){ dots = dots+5; }
no usa un campo de texto y asigna usando variables directas, no desde la entrada del usuario. Así que de eso me salí. Pero vi que tienes razón de que está asignando dicho campo de textotxt
adots
, ydots
es una variable global, por lo que se actualiza por esa entrada. Tienes razón. Gracias.