2013-10-01 4 views
1

Je fais une calculatrice pour le plaisir, mais pour une raison quelconque tout fonctionne mais l'addition. Au lieu d'ajouter deux nombres, il les écrit tous les deux. Par exemple 5 + 7 montre comme étant 57.Jquery: + ne fonctionne pas correctement

Comme je l'ai déjà dit, -, /, et * fonctionnent bien. Comment devrais-je résoudre ce problème?

Voici le code:

$('.solve2').click(function(){ 
var num1 = $('#num').val(); 
var num2 = $('#number').val(); 
var ans = num1+num2; 
alert(''+ans+''); 
}); 

Répondre

2
$('.solve2').click(function(){ 
var num1 = parseInt($('#num').val()); 
var num2 = parseInt($('#number').val()); 
var ans = num1+num2; 
alert(''+ans+''); 
}); 

Au lieu de parseInt, vous pouvez utiliser parseFloat comme indiqué dans une autre réponse.

EDIT: Comme indiqué dans les commentaires ci-dessous, il est préférable de forcer la chaîne à être interprétée comme un nombre décimal. Vous pouvez le faire en ajoutant le paramètre radix.

var radix = 10; //decimal 
var num1 = parseInt($('#num').val(), radix); 
var num2 = parseInt($('#number').val(), radix); 
+1

Il vous manque le paramètre 'radix' pour' parseInt'. –

+0

Le paramètre radix est optionnel, et autant que je sache, le questionneur n'utilise que des nombres décimaux. (Dans les anciens navigateurs, cela peut poser problème lorsqu'un utilisateur entre un nombre avec un '0' en tête, donc il peut être plus sûr d'ajouter une base de 10. Mais ce n'est pas nécessaire.) – Tom

+0

@Tom La notation octale est toujours valide et pris en charge dans les navigateurs modernes au-delà du mode strict. –

2

Utilisez parseFloat, il analyse un argument de chaîne et retourne un nombre à virgule flottante.

var ans = parseFloat(num1)+parseFloat(num2); 

Comme par votre exemple, il travaillait comme opérateur cocantenation

0

Simple, vous devez convertir votre chaîne en nombre entier. Utilisez parseInt

var num1 = parseInt($('#num').val()); 
var num2 = parseInt($('#number').val()); 

voir mon exemple: JSFiddle sample

0

Lorsque vous obtenez la valeur d'un élément d'entrée - soit via JS plaine ou en utilisant jQuery de .val() - elle retourne sous forme de chaîne. Et quand l'un des opérandes de + est une chaîne et l'autre est une primitive - soit un nombre, chaîne, booléen, undefined ou null - alors que l'autre est converti en une chaîne et ils sont concaténés:

4 + " four" === "4 four"; // true 
false + " is now a string" === "false is now a string"; // true 

etc.

Par conséquent, vos valeurs retournées de .val() sont concaténés, et vous avez besoin de convertir les chaînes renvoyées de .val() en chiffres à l'aide parseFloat:

$('.solve2').click(function(){ 
    var num1 = parseFloat($('#num').val()), 
     num2 = parseFloat($('#number').val()), 
     ans = num1 + num2; 
    console.log(ans); 
}); 
Questions connexes