3

给定:我有数值的元素浮动(谢谢,Pointy)最多两位小数(例如:1.50 和 2.25)。

目标:收集几个元素的值并将它们相加。(如:1.50 + 2.25 = 3.75 )

代码

$(".quantity").keyup(function(){      
  var sum = 0.00;
  var subTotals = document.getElementsByClassName("sub-total")

  $.each(subTotals, function(){
    sum += $(this).val() << 0
  });
  $("#products_revenue_income").val(sum)
});

问题:我习惯了 Ruby,所以我假设遍历 [1.5, 2.25] 的数组,您可以将元素与+=, 相加得到3.75,但我的返回值是01.502.25,似乎 (1) 将零添加到left 和 (2) 将值视为字符串。当我添加移位运算符<<时,它删除了左零并再次将值视为整数,但它对总数进行了四舍五入,所以我的返回值为 3.

我尝试过的:我尝试parseFloat($(this).val()).toFixed(2)在块内使用以确保每个值都被视为整数,但它似乎对结果没有任何影响。

技术:jQuery 版本:1.7.1。

感谢您抽出宝贵时间让我知道您是否需要任何其他上下文。

4

3 回答 3

3

jQuery 方法 .val() 将返回一个类似字符串的对象,因此要将其转换为浮点数以使您的数学工作正常,您可以使用 parseFloat:

sum += parseFloat($(this).val())

parseFloat 的 MDN 文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseFloat

例子:

subTotals = [1.1, 2.2]
sum = 0

$.each(subTotals, function(idx, num){
    sum += parseFloat(num)
})

console.log(sum) // Will print 3.3

演示:

http://jsfiddle.net/sifriday/7q4qe4L3/

于 2014-08-13T14:36:37.873 回答
3

发生这种情况是因为 jQuery 的val()方法返回value匹配元素的属性,该属性是字符串类型。这意味着您陷入了字符串连接陷阱("1"+ "1"= "11")。您可以使用一元加号 ( ) 将您的值转换为数字+

sum += +$(this).val();

还值得注意的是,它value是 的原生属性this,因此您可以在此处完全删除 jQuery 包装器和方法:

sum += +this.value;
于 2014-08-13T14:36:42.030 回答
1

问题是val()返回一个字符串。而不是移位,转换值。最干净和最简单的方法是从值中减去零。

$(".quantity").keyup(function(){      
  var sum = 0.00;
  var subTotals = document.getElementsByClassName("sub-total")

  $.each(subTotals, function(){
    sum += $(this).val()-0
  });
  $("#products_revenue_income").val(sum)
});

这当然假设这些值将始终是数字。

于 2014-08-13T14:38:42.133 回答