2016-11-02 12 views
0

ユーザーがクリックしたときに合計を計算するjsファイルがあります。これはクリックされたすべての行を合計しますが、数値に10進数が含まれていれば正しく追加されず、行は、次のjQueryは小数点以下を正しく加算しない

12.00 
13.00 
が含まれている場合

function calculateRevenue(){ 
     var sum = 0; 
     $("input#check_count_revenue[type=checkbox]:checked").each(function() { 
      sum += parseInt($(this).attr("data-revenuecount")); 
     }); 

     $("#revenue_count_totals").html(sum.toFixed(2)).digits(); 
    }; 

は、この

table.on("change","input#check_count_revenue", function() { 
     $(this).closest("td").addClass("checked_revenue"); 
     calculateRevenue(); 
     if ($(this).prop("checked") === false) 
     $(this).closest("td").removeClass("checked_revenue"); 
    }); 

のような関数を呼び出します正しく25.00

しかし

12.00 
13.01 

を合計う

はまだ代わり25.01

すべてのアイデアは、25.00を得ましたか。私はすでにparseIntの代わりにparseFloatを試して解決しません。

+2

まあ、明らかに 'のparseInt()ので'、仕事に行くのではありませんを使用することができます小数点以下の桁数を捨てる* * ...これを修正したら、浮動小数点数について一般的に読むことができます(http://stackoverflow.com/questions/588004/is-floating- point-math-broken)と[in JS](http://stackoverflow.com/questions/10473994/javascript-adding-decimal-numbers-issue?noredirect=1&lq=1)を参照してください。 – nnnnnn

+0

私の質問@PHPglueを編集しました –

+2

そこに使用している 'digits()'関数は何ですか? – Dekel

答えて

-1

これはJavaScriptだけでなく、浮動小数点演算を扱ういくつかのプログラミング言語でよく見られる問題です。

これを確認するには StackOverflow、explanation JSでの作業方法、CS docsについて詳しくは、こちらをご覧ください。

私が思うには、あなたがあなたに「ソリューション」を与える前に、問題を理解し、しかし、あなたが本当に私はあなたがmath.jsを使用することをお勧めします浮動小数点値で動作するように深刻かつ信頼性のツールが必要な場合重要です。これはあなたのために働くかどう

+0

私は本当にそれが関連しているとは思わない。コンソールで ''(parseFloat('12 .01 ')+ parseFloat('13 .00'))。toFixed(2) 'を実行すると、25.01になります。これはここで問題ではありません... – Dekel

+0

これは問題です、あなたは 'parseFloat'を使ってそれを扱っています –

+1

parseFloat ...の使用に関する質問はもう一度チェックしてください。 – Dekel

-2

参照:

function sumFix(){ 
    var a = [].slice.call(arguments), d = a.pop(), s = 0, p = Math.pow(10, d); 
    for(var i=0,l=a.length; i<l; i++){ 
    s += a[i]*p; 
    } 
    return (s/p).toFixed(d); 
} 

次にあなたができる:

function calculateRevenue(){ 
    var nums = []; 
    $('input#check_count_revenue[type=checkbox]:checked').each(function(){ 
    nums.push(parseFloat($(this).attr("data-revenuecount"))); 
    }); 
    $('#revenue_count_totals').html(sumFix.apply(null, nums.concat(2)); 
}; 

sumFixは、任意の数の引数、必要な小数点以下の桁であること、最後の1を取ります。 .apply()を使用せずに

通常の使用:

console.log(sumFix(12.00, 13.01, 2)); 
+0

コメントを読む – Dekel

関連する問題