Javascript 整数数组(字符串?)之和,不丢失小数

Javascript 整数数组(字符串?)之和,不丢失小数,javascript,jquery-1.7,Javascript,Jquery 1.7,给定的:我有整数浮点值的元素(谢谢,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 +

给定的:我有整数浮点值的元素(谢谢,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)
});
$(“.quantity”).keyup(函数(){
var总和=0.00;
var小计=document.getElementsByClassName(“小计”)
$.each(小计,函数(){
sum+=$(this.val()jQuery方法.val()将返回一个类似字符串的对象,因此要将其转换为浮点以使您的数学计算正常,可以使用parseFloat:

sum += parseFloat($(this).val())
parseFloat的MDN文档:

例如:

subTotals = [1.1, 2.2]
sum = 0

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

console.log(sum) // Will print 3.3
演示:


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

还值得注意的是,
value
this
的本机属性,因此您可以将jQuery包装器和方法放在这里:

sum += +this.value;

问题是
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)
});

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

1.50
2.25
不是整数。很好,@Pointy.:)还请注意,在对非整数值求和时,很可能会看到浮点问题。提示:
$(".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)
});