0

ユーザーが 2 つの数字を入力できる単純なテーブルがあり、スクリプトは年間平均を計算し、選択メニューに同じオプションがあるすべての行の合計を取得します。

サンプルの JSFiddle をセットアップしました。

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

これは、これがどのように機能するかを示しています。ときどき奇妙な丸めエラーが発生することに気付きました (小数点以下 1 桁に丸めたい)。たとえば、「中程度」を選択し、平均 0.4 に対して 5 と 4 を入力し、ボタンをクリックして新しい行を作成し、もう一度「中程度」を選択してから、平均 2.3 に対して 3 と 40 を入力すると、中程度の合計は「2.6999999999999997」ですが、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 );

  }

</p>

4

2 に答える 2

3

あなたの問題はここにあります:

$('#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/

于 2012-08-15T17:16:17.897 に答える
3

$avg.toFixed(1);代わりに試してくださいMath.round( $avg * 10 ) / 10;

于 2012-08-15T17:10:57.760 に答える