给定:我的元素的值为整数浮点数(谢谢你,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)向左添加零,(2)将值视为字符串。当我添加了移位运算符<<
时,它删除了左边的零并再次处理了整数等值,但它舍入了总数,因此我的返回值为3
。
我尝试了什么:我已经尝试在块中使用parseFloat($(this).val()).toFixed(2)
来确保每个值都被视为整数,但它并没有似乎对结果有任何影响。
技术:jQuery版本:1.7.1。
感谢您的时间如果您需要任何其他背景,请告诉我。
答案 0 :(得分:3)
jQuery方法.val()将返回一个类似于字符串的对象,因此要将其转换为float以使数学运行正常,可以使用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
演示:
答案 1 :(得分:3)
这种情况正在发生,因为jQuery的val()
方法返回匹配元素的value
属性,该属性是字符串类型。这意味着您将陷入字符串连接陷阱("1"
+ "1"
= "11"
)。您可以使用一元加号(+
)将您的值转换为数字:
sum += +$(this).val();
另外值得注意的是value
是this
的本机属性,因此您可以完全删除jQuery包装器和方法:
sum += +this.value;
答案 2 :(得分: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)
});
这当然假设值总是是数字。