Comment assurer l'ajout de javascript au lieu de la concaténation de chaîne (n'ajoute pas toujours des nombres entiers)

Grâce à ma bibliothèque javascript, je finis par une chaîne qui représente un nombre. Maintenant, je souhaite préformer un ajout sur ce numéro sans qu'il soit en train de faire une concaténation de chaîne à la place. La solution est simple ( Comment puis-je ajouter une valeur entière avec javascript (jquery) à une valeur qui renvoie une chaîne? Comment faire une addition au lieu d'une concaténation ) si votre nombre est toujours en entier. Cependant, ma chaîne pourrait être un flotteur ou un nombre entier, et au moment de l'ajout, et je ne sais pas lequel sera. Existe-t-il un moyen de s'assurer que l'addition se produit indépendamment du fait qu'il s'agisse d'un flotteur ou d'un entier?

Essayez d'utiliser parseFloat . Les variables d'entrée seront converties en flotteurs, ce qui fonctionnera si la chaîne contient un nombre entier ou un flotteur. Votre résultat sera toujours un flotteur.

Il est raisonnablement sûr d'utiliser toujours parseFloat même si vous êtes donné un nombre entier. Si vous devez utiliser la conversion appropriée, vous pouvez match pour un point décimal et utiliser la fonction appropriée.

Je vais supposer que l'ajout de flotteur est suffisant, et si ce n'est pas le cas, il faudra creuser plus profondément.

 function alwaysAddAsNumbers(numberOne, numberTwo){ var parseOne = parseFloat(numberOne), parseTwo = parseFloat(numberTwo); if (isNaN(parseOne)) parseOne = 0; if (isNaN(parseTwo)) parseTwo = 0; return parseOne + parseTwo; } 

Pour prendre ce que @Asad a dit, vous voudrez peut-être le faire à la place:

 function alwaysAddAsNumbers(a, b){ var m = 0, n = 0, d = /\./, f = parseFloat, i = parseInt, t = isNaN, r = 10; m = (d.test(a)) ? f(a) : i(a,r); n = (d.test(b)) ? f(b) : i(b,r); if (t(m)) m = 0; if (t(n)) n = 0; return m + n; } 

Cela vous donnera toujours au moins une sortie zéro, et ne vous dira pas si l'une ou l'autre est NaN .

Pour une raison quelconque … qui sait ???

L'utilisation de parseFloat fonctionne …. quand parseInt ne … évidemment, ils ne sont pas toujours les mêmes.

FWIW …. Je "ajoute" des éléments de données à partir des cases "cochées" ici …

  var AddOns = 0; $( '.broadcast-channels').each(function(){ if ( $(this).prop("checked")) { var thisAddOn = parseFloat($(this).data('channel')); AddOns = AddOns + thisAddOn; } });