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 中,值为 1.44 而不是 2.89。我得到以下值 2.8899999999999997

4

2 回答 2

4

欢迎来到浮点数学的世界(互联网上有很多关于此的文章,但这就是 javascript 和其他语言中浮点数学类型的工作方式)。您可以在许多文章中阅读有关浮点问题的信息。这是一个。问题是一些正常的十进制值不能以浮点格式精确表示,所以你会得到你所期望的微小错误。

一般来说,如果您在原始数字中没有使用大量小数点,那么将您的值向下舍入到较小的小数点数将消除差异。

例如,如果你想确保得到 2.89,那么你可以将你的值四舍五入到一定数量的小数点,你就会得到想要的答案。

您可能希望更改将其放入总字段的方式,如下所示:

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

或者,您甚至可以使用类似6in的值,sum.toFixed(6)它仍然可以解决您的问题。

如果您真的想要完美的精度(例如非常重要的财务计算),那么有些库不使用浮点来进行准确的财务数学计算,或者您实际上可以转换为整数美分并将所有数学运算作为美分进行把小数点放回最后。

于 2013-02-13T21:41:31.640 回答
1

您可以使用 JavaScripttoFixed()方法。

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

于 2013-02-13T21:43:00.653 回答