Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript jquery.each()问题_Javascript_Jquery - Fatal编程技术网

javascript jquery.each()问题

javascript jquery.each()问题,javascript,jquery,Javascript,Jquery,我有一些带有class.commission\u计划和不同ID的表单输入元素。我需要总结这个元素的值。我使用以下代码: jQuery(document).ready(function() { var total = 0; $('.commission_plan').each(function() { total = total + parseFloat($(this).val()); }); $('#payment_total_amount_hid

我有一些带有class.commission\u计划和不同ID的表单输入元素。我需要总结这个元素的值。我使用以下代码:

jQuery(document).ready(function() {
    var total = 0;
    $('.commission_plan').each(function() {
        total = total + parseFloat($(this).val());
    });
    $('#payment_total_amount_hidden').val(total);
    $('#payment_total_amount').text('Total: ' + total);
}):

在我的输入字段中是值3.45和4.65。但为什么#付款总额#包含8.1000000000001?非常奇怪的行为。

这是浮点值精度问题的结果。您可以尝试使用toFixed(n)javascript方法来限制小数位数


编辑:正如Nick在评论中阐明的,toFixed(n)方法将浮点转换为字符串,因此只有在计算完成后才应使用它。

这是浮点值精度问题的结果。您可以尝试使用toFixed(n)javascript方法来限制小数位数


编辑:正如Nick在评论中阐明的,toFixed(n)方法将浮点转换为字符串,因此只有在计算完成后才应使用它。

这就是浮点数学的行为方式,对于货币情况,您通常需要2位小数,因此在呈现它时使用,如下所示:

var total = 0;
    $('.commission_plan').each(function(){
        total = total + parseFloat($(this).val());
    });
    $('#payment_total_amount_hidden').val(total.toFixed(2));
    $('#payment_total_amount').text('Total: '+total.toFixed(2));
}):

这就是浮点数学的行为方式,对于经常需要2位小数的货币情况,请在渲染时使用,如下所示:

var total = 0;
    $('.commission_plan').each(function(){
        total = total + parseFloat($(this).val());
    });
    $('#payment_total_amount_hidden').val(total.toFixed(2));
    $('#payment_total_amount').text('Total: '+total.toFixed(2));
}):

这不是使用它的地方,因为结果是一个字符串。@Nick-你能澄清一下为什么不能在这里使用它吗;我已经测试了结果,它看起来像预期的那样工作?您将向字符串添加数字,第二个循环将是一个没有
.toFixed()
方法的字符串,因此它会爆炸。你可以在这里测试:@Nick-谢谢,我没有意识到toFixed方法将类型更改为字符串。我已经适当地编辑了我的答案。这不是使用它的地方,因为结果是一个字符串。@Nick-你能澄清一下为什么不能在这里使用它吗;我已经测试了结果,它看起来像预期的那样工作?您将向字符串添加数字,第二个循环将是一个没有
.toFixed()
方法的字符串,因此它会爆炸。你可以在这里测试:@Nick-谢谢,我没有意识到toFixed方法将类型更改为字符串。我已适当地编辑了我的答案。请尝试使用映射。和get方法。@steven-
.map()
返回一个数组,在这里它真的不合适,因为我们在循环的末尾寻找一个值。请尝试使用映射。和get方法。@steven-
.map()
返回一个数组,在这里它真的不合适,因为我们在循环的末尾寻找一个值。