jQuery - 带有一些数字的表格计算出现奇怪的舍入错误

jQuery - Strange rounding error with table calculations with some numbers

本文关键字:错误 舍入 计算 表格 jQuery 数字      更新时间:2023-09-26

我有一个简单的表格,允许用户输入 2 个数字,然后脚本计算年平均值并获取在选择菜单中具有相同选项的所有行的总计。

我已经设置了一个示例JSFiddle:

http://jsfiddle.net/fmdataweb/73Jzc/1/

这显示了它是如何工作的。我刚刚注意到有时我会收到一个奇怪的舍入错误(我希望它四舍五入到小数点后一位)。例如,如果您选择"中等",然后输入 5 和 4 表示平均值为 0.4,然后单击按钮创建新行并再次选择"中等",然后输入 3 和 40 表示平均值为 2.3,您会注意到中等值的总数是"2.699999999999999997",而它应该是 2.7。

如果您输入其他数字,到目前为止在我的测试中还可以,但由于某种原因,这些组合不会四舍五入为总数,我不确定为什么。如果有人可以指出我的脚本中的错误,请不胜感激。下面是执行平均值和总计的脚本:

$('#nextYear')
    .on('change', 'select', calc)
    .on('keyup', 'input', calc);
function calc(){
    $('#nextYear tr:has(.risk)').each(function(i,v){
        var $cel = $(v.cells);
        var $risk = $cel.eq(1).find('option:selected').val();
        var $numb = $cel.eq(2).find('input').val();
        var $weeks = $cel.eq(3).find('input').val();
        var $avg = ($numb * $weeks) / 52;
        var $avgRounded = Math.round( $avg * 10 ) / 10;
        $cel.eq(4).find('input').val($avgRounded);
    });   
    var tot = {};
    $('#nextYear tr:has(.risk) option:selected')
                .map(function(i){
                    var el = $(this).val();
                    var qty = parseFloat($('#nextYear tr:has(.risk)').eq(i).find('td:last').prev().find('input').val());
                    if (!tot.hasOwnProperty(el)) {
                        tot[el] = 0;            
                    }
                    tot[el] += qty
                    return tot;
                }).get();
     // console.log(tot);
      $('#textfield6').val(tot.moderate);
     $('#textfield7').val( tot.high );
  }

你的问题在这里:

$('#textfield6').val(tot.moderate);
$('#textfield7').val( tot.high );

你必须像你所做的那样对它们进行四舍五入

var $avgRounded = Math.round( $avg * 10 ) / 10;

或使用.toFixed(1)

编辑:

然后,代码为:

$('#textfield6').val(tot.moderate.toFixed(1));
$('#textfield7').val(tot.high.toFixed(1));

你可以在这里看到它:http://jsfiddle.net/73Jzc/2/

尝试$avg.toFixed(1);而不是Math.round( $avg * 10 ) / 10;