1

テキストボックスの変更イベントで次のJquery関数があります

  $('input:text[id$=txtText1]').change(GetTotal);

これはGetTotal関数を呼び出します

 function GetTotal() {

            var value1 = txtText1.val();
            var value2 = txtText2.val();
                 var sum = add(value1, value2)

                 $('input:text[id$=txtSubTotals]').val(sum);
}

これは追加機能です

 function add() {
            var sum = 0;
            for (var i = 0, j = arguments.length; i < j; i++) {
                if (IsNumeric(arguments[i])) {
                    sum += parseFloat(arguments[i]);
                }
            }
            return sum;
        }

テキストボックス1では値は1.45であり、テキストボックス2では2.89ではなく1.44です。次の値を取得しています2.88999999999999997

4

2 に答える 2

4

浮動小数点数学の世界へようこそ(これについてはインターネット上にたくさん書かれていますが、これがjavascriptや他の言語の浮動小数点数学のタイプの仕組みです)。浮動小数点の問題については、多くの記事で読むことができます。これが1つです。問題は、一部の通常の10進値を浮動小数点形式で正確に表すことができないため、予想どおりに小さなエラーが発生することです。

一般に、元の数値で多数の小数点を使用していない場合は、値を少数の小数点に切り捨てると、不一致が解消されます。

たとえば、2.89を確実に取得したい場合は、値を特定の小数点以下の桁数に丸めることができ、目的の答えが得られます。

次のように、合計フィールドへの配置方法を変更することをお勧めします。

$('input:text[id$=txtSubTotals]').val(sum.toFixed(2));

または、のような値を使用しても6sum.toFixed(6)問題は解決します。

(非常に重要な財務計算のように)完全な精度が本当に必要な場合は、正確な財務計算に浮動小数点を使用しないライブラリがあります。または、実際に整数のセントに変換して、すべての計算操作をセントとしてのみ実行できます。小数点を最後に戻します。

于 2013-02-13T21:41:31.640 に答える
1

JavaScripttoFixed()メソッドを使用できます。

http://www.w3schools.com/jsref/jsref_tofixed.asp

于 2013-02-13T21:43:00.653 に答える