J'ai récupéré une chaîne et j'en ai extrait un nombre décimal en utilisant l'expression régulière, par ex. 1,00 ou 3,99. Maintenant, je veux utiliser ces chiffres pour le calcul. Comment puis-je convertir ces résultats d'expression régulière en nombres appropriés afin de pouvoir effectuer le calcul? Dans le code ci-dessous, chaque clic devrait ajouter le prix au total précédent mais il ne fait pas correctement la somme des nombres.

var SaveAfrica = {
  init: function () {
    this.addToBasket();
  },

  addToBasket: function () {
    var featured = $('section.featured'),
        bsktTotalSpan = $('.basket_total span.basket-qty'),
        list = featured.find('ul'),
        item = list.find('li');

    featured.delegate('.buy-now', 'click', function (e) {
        var thisElem = $(this), 
            qtyData = thisElem.closest('li').data('price'),
            total = parseInt(bsktTotalSpan.text()) + parseFloat(qtyData.match(/[\d\.\d]+/i));


        e.preventDefault();

        bsktTotalSpan.text(parseFloat(total));

        console.log('The total is: total);

    });
  }
};

SaveAfrica.init();

Le HTML d'où vient le chiffre:

<li data-price="&pound;2.99"><a href="#" class="buy-now"><img src="someImage.jpg" alt="some image" /></a></li>

Merci beaucoup

0
Shaoz 12 oct. 2011 à 21:04

4 réponses

Meilleure réponse

À quoi le soleil sort-il, le cas échéant?

Vous voudrez peut-être essayer ce qui suit à la place:

total = parseFloat(bsktTotalSpan.text()) + parseFloat(qtyData.match(/[\d\.\d]+/i));

Autrement dit, analysez les deux en flottants et définissez explicitement le total comme un flottant. Sinon, les décimales pourraient être tronquées quelque part.

2
WilHall 12 oct. 2011 à 17:08

Vous pouvez simplement multiplier la chaîne par 1 afin de la convertir en nombre:

num = '1.00' * 1 //result is the number 1
-1
maxedison 12 oct. 2011 à 17:09

Je pense qu'il y a une faute de frappe tout en obtenant le prix de l'élément.

Le code doit être comme ci-dessous,

qtyData = thisElem.closest('li').data('data-price'),
1
Vivek Viswanathan 12 oct. 2011 à 17:16

Votre problème peut être que .match() renvoie un tableau de correspondances. Vous pourriez donc essayer quelque chose comme:

parseFloat(qtyData.match(/[\d\.\d]+/i)[0]);
3
The.Anti.9 12 oct. 2011 à 17:12
7743781