使用parseFloat以及使用javascript的字符串获取价格,parseInt无法正常工作

时间:2011-10-12 17:04:07

标签: javascript jquery html

我检索了一个字符串,并使用正则表达式从中提取了一个十进制数字,例如1.00或3.99。现在我想用这些数字进行计算。如何将这些正则表达式结果转换为正确的数字,以便我可以执行计算?在下面的代码中,每次点击都应该将价格添加到之前的总数中,但它不能正确地计算数字的总和。

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();

数字来自的HTML:

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

非常感谢

4 个答案:

答案 0 :(得分:3)

您的问题可能是.match()返回一系列匹配项。所以你可能会尝试类似的东西:

parseFloat(qtyData.match(/[\d\.\d]+/i)[0]);

答案 1 :(得分:2)

总和是什么,如果有的话?

您可能需要尝试以下方法:

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

也就是说,将解析为浮点数并将total明确定义为float。否则,小数可能会在某处被截断。

答案 2 :(得分:1)

我认为从元素中获取价格时会出现拼写错误。

代码应如下所示,

qtyData = thisElem.closest('li').data('data-price'),

答案 3 :(得分:-1)

您可以简单地将字符串乘以1,以便将其转换为数字:

num = '1.00' * 1 //result is the number 1