0

重複の可能性:
JavaScriptの数学は壊れていますか?

3つの入力フィールドを合計しようとしています。各入力フィールドには33.3の値が含まれており、合計で99.9になるはずですが、合計で99.89999999999999になります。

誰かがこれがどのように起こっているか説明できますか?以下は私のコードです。前もって感謝します。

$("#modify-funding input.percentCalc").sumValues()

$.fn.sumValues = function () {
    var sum = 0;
    this.each(function () {
        sum += $(this).fieldVal();
    });
    return sum;
};

$.fn.fieldVal = function () {
    var val;
    if ($(this).is(':input')) {
        val = $(this).val();
        alert("val " + val);
    } else {
        val = $(this).text();
    }       
    return parseFloat(('0' + val).replace(/[^0-9-\.]/g, ''), 10);
};
4

1 に答える 1

1

浮動小数点数の素晴らしい世界へようこそ。フローティングポイントは、表現したい数値の近似値です。したがって、数値をそのまま保存すると、33.3正確には33.3このエラーが複数回の操作の後に加算されます。フロートを比較する最良の方法は、同等性をテストするのではなく、範囲内の天気をテストすることです。

それ以外の

if(x == 99.9)

試す

if(Math.abs(99.9 - x) < .1)

文字列表現だけが必要な場合。浮動小数点数を整数として渡してみることができます。つまり、文字列に戻すときに、必要に応じて小数を追加します33.3333これはあなたの問題に対する最良の解決策でしょう。

于 2012-07-16T14:37:13.933 に答える