Javascript 整数数组(字符串?)之和,不丢失小数
给定的:我有整数浮点值的元素(谢谢,Pointy),最多两位小数(例如:1.50和2.25) 目标:收集多个元素的值并将它们相加。(如:1.50+2.25=3.75) 代码: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 +
$(".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)
});