J'ajoute deux nombres, mais je n'obtiens pas une valeur correcte.
Par exemple, faire 1 + 2
renvoie 12 et non 3
Qu'est-ce que je fais mal dans ce code?
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
okconfus
la source
la source
<input type="number">
, vous pouvez simplement obtenir sa.valueAsNumber
propriété directement.Réponses:
Ce sont en fait des chaînes, pas des nombres. Le moyen le plus simple de produire un nombre à partir d'une chaîne est de le faire précéder de
+
:la source
+
-prefix avec les chaînes?J'utilise juste
Number()
:la source
var k += Number(i)
Vous devez utiliser la
parseInt()
méthode de javaScript pour transformer les chaînes en nombres. À l'heure actuelle, ce sont des chaînes, donc ajouter deux chaînes les concatène, c'est pourquoi vous obtenez "12".la source
parseInt()
soit la meilleure option ici étant donné que la fonction de l'OP est d'ajouter deux "nombres" saisis par l'utilisateur, pas deux "entiers".parseFloat
si le PO fournissait plus d'informations.parseInt()
ne renvoie que des entiers, et n'explique aucune desparseInt()
"bizarreries" de - ce qui pourrait être un problème avec les données saisies par l'utilisateur - je pensait que cela valait la peine d'être mentionné. (Je n'ai pas vraiment voté contre ou quoi que ce soit.)Utilisez parseInt (...) mais assurez-vous de spécifier une valeur de base; sinon vous rencontrerez plusieurs bogues (si la chaîne commence par "0", la base est octal / 8 etc.).
J'espère que cela t'aides!
la source
parseInt()
soit la meilleure option ici étant donné que la fonction de l'OP est d'ajouter deux "nombres" saisis par l'utilisateur, pas deux "entiers".parseInt("012")
fonctionne bien, retourne 12. Bien sûr, vous devez toujours faire attention avec des choses comme[1,2].map(parseInt)
.Ajoutez simplement une méthode de conversion de type simple car l'entrée est prise dans le texte. Utilisez le suivant:
la source
Ce qui suit peut être utile en termes généraux.
Premièrement, les champs de formulaire HTML sont limités au texte . Cela s'applique particulièrement aux zones de texte, même si vous avez pris soin de vous assurer que la valeur ressemble à un nombre.
Deuxièmement, JavaScript, pour le meilleur ou pour le pire, a surchargé l'
+
opérateur avec deux significations: il ajoute des nombres et il concatène des chaînes. Il a une préférence pour la concaténation, donc même une expression comme3+'4'
sera traitée comme une concaténation.Troisièmement, JavaScript tentera de changer les types de manière dynamique s'il le peut et s'il le faut. Par exemple
'2'*'3'
, changera les deux types en nombres, car vous ne pouvez pas multiplier les chaînes. Si l'un d'eux est incompatible, vous obtiendrezNaN
, Pas un nombre.Votre problème se produit car les données provenant du formulaire sont considérées comme une chaîne et le
+
sera donc concaténer plutôt que d'ajouter.Lors de la lecture de données supposées numériques à partir d'un formulaire, vous devez toujours les pousser à travers
parseInt()
ouparseFloat()
, selon que vous voulez un entier ou un décimal.Notez qu'aucune fonction ne convertit vraiment une chaîne en nombre. Au lieu de cela, il analysera la chaîne de gauche à droite jusqu'à ce qu'elle atteigne un caractère numérique invalide ou jusqu'à la fin et convertira ce qui a été accepté. Dans le cas de
parseFloat
, cela inclut un point décimal, mais pas deux.Tout ce qui suit le numéro valide est simplement ignoré. Ils échouent si la chaîne ne commence même pas par un nombre. Ensuite, vous obtiendrez
NaN
.Une bonne technique à usage général pour les nombres à partir de formulaires est quelque chose comme ceci:
Si vous êtes prêt à fusionner une chaîne non valide à 0, vous pouvez utiliser:
la source
Facile
la source
Cela ne résumera pas le nombre; à la place, il le concaténera:
Tu as besoin de faire:
Vous devez utiliser parseInt pour spécifier l'opération sur les nombres. Exemple:
la source
addition
etsubtraction
non la réponse acceptée.Ce code fait la somme des deux variables! Mettez-le dans votre fonction
la source
Il vous manque la conversion de type lors de l'étape d'ajout ...
var x = y + z;
devrait êtrevar x = parseInt(y) + parseInt(z);
la source
la source
C'est très simple:
la source
Essaye ça:
la source
la source
Si nous avons deux champs d'entrée, récupérez les valeurs des champs d'entrée, puis ajoutez-les à l'aide de JavaScript.
la source
Vous pouvez faire une pré-vérification avec une expression régulière si ce sont des nombres comme
la source
Utilisez-
parseFloat
le pour convertir la chaîne en nombre, y compris les valeurs décimales.la source
Vous pouvez également écrire: var z = x - -y; Et vous obtenez la bonne réponse.
la source
Voici votre code en analysant les variables de la fonction.
Répondre
la source
Une solution alternative, juste partager :):
la source