Estoy agregando dos números, pero no obtengo un valor correcto.
Por ejemplo, hacer 1 + 2
devuelve 12 y no 3
¿Qué estoy haciendo mal en este 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
fuente
fuente
<input type="number">
, simplemente puede obtener su.valueAsNumber
propiedad directamente.Respuestas:
En realidad son cadenas, no números. La forma más fácil de producir un número a partir de una cadena es anteponerlo con
+
:fuente
+
prefijo con las cadenas?Yo solo uso
Number()
:fuente
var k += Number(i)
Debe usar el
parseInt()
método de javaScript para convertir las cadenas de nuevo en números. En este momento son cadenas, por lo que agregar dos cadenas las concatena, por lo que obtienes "12".fuente
parseInt()
sea la mejor opción aquí dado que la función del OP es agregar dos "números" ingresados por el usuario, no dos "enteros".parseFloat
si el OP proporciona más información.parseInt()
solo devuelva enteros, y no explica ninguna deparseInt()
las "peculiaridades", lo que podría ser un problema con los datos ingresados por el usuario. Pensé que valía la pena mencionarlo. (En realidad no voté en contra ni nada.)Use parseInt (...) pero asegúrese de especificar un valor de raíz; de lo contrario, se encontrará con varios errores (si la cadena comienza con "0", la raíz es octal / 8, etc.).
¡Espero que esto ayude!
fuente
parseInt()
sea la mejor opción aquí dado que la función del OP es agregar dos "números" ingresados por el usuario, no dos "enteros".parseInt("012")
funciona bien, devolviendo 12. Por supuesto, todavía tienes que tener cuidado con cosas como[1,2].map(parseInt)
.Simplemente agregue un método de conversión de tipo simple ya que la entrada se toma en texto. Use lo siguiente:
fuente
Lo siguiente puede ser útil en términos generales.
Primero, los campos de formulario HTML están limitados a texto . Esto se aplica especialmente a los cuadros de texto, incluso si se ha esforzado para garantizar que el valor se vea como un número.
En segundo lugar, JavaScript, para bien o para mal, ha sobrecargado al
+
operador con dos significados: agrega números y concatena cadenas. Tiene preferencia por la concatenación, por lo que incluso una expresión como3+'4'
se tratará como concatenación.En tercer lugar, JavaScript intentará cambiar los tipos dinámicamente si puede y si es necesario. Por ejemplo
'2'*'3'
, cambiará ambos tipos a números, ya que no puede multiplicar cadenas. Si uno de ellos es incompatible, obtendráNaN
No es un número.Su problema ocurre porque los datos que provienen del formulario se consideran una cadena y
+
, por lo tanto, se concatenarán en lugar de agregarse.Al leer datos supuestamente numéricos de un formulario, siempre debe pasarlos
parseInt()
oparseFloat()
, dependiendo de si desea un entero o un decimal.Tenga en cuenta que ninguna función convierte verdaderamente una cadena en un número. En su lugar, analizará la cadena de izquierda a derecha hasta que llegue a un carácter numérico no válido o al final y convierta lo que se ha aceptado. En el caso de
parseFloat
, eso incluye un punto decimal, pero no dos.Cualquier cosa después del número válido simplemente se ignora. Fallan si la cadena ni siquiera comienza como un número. Entonces lo conseguirás
NaN
.Una buena técnica de propósito general para números de formularios es algo como esto:
Si está preparado para fusionar una cadena no válida a 0, puede usar:
fuente
Sencillo
fuente
Esto no resumirá el número; en su lugar lo concatenará:
Necesitas hacer:
Debe usar parseInt para especificar la operación en números. Ejemplo:
fuente
addition
ysubtraction
no la aceptada.¡Este código suma las dos variables! Ponlo en tu función
fuente
Te falta la conversión de tipo durante el paso de adición ...
var x = y + z;
debe servar x = parseInt(y) + parseInt(z);
fuente
fuente
Es muy simple:
fuente
Prueba esto:
fuente
fuente
Si tenemos dos campos de entrada, obtenga los valores de los campos de entrada y luego agréguelos usando JavaScript.
fuente
Puede hacer una comprobación previa con expresión regular si son números como
fuente
Úselo
parseFloat
convertirá una cadena a un número que incluya valores decimales.fuente
También puedes escribir: var z = x - -y; Y obtienes la respuesta correcta.
fuente
Aquí va tu código analizando las variables en la función.
Responder
fuente
Una solución alternativa, solo compartir :):
fuente