Jquery - 添加带小数点的两个数字会得到错误的总数

时间:2013-02-13 21:39:11

标签: jquery

我在文本框上的更改事件上有以下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

2 个答案:

答案 0 :(得分:4)

欢迎来到浮点数学的世界(在互联网上有很多关于此的文章,但这是javascript和其他语言中浮点数学类型的工作原理)。您可以在许多文章中阅读浮点问题。这是one。问题在于,某些正常的十进制值无法以浮点格式精确表示,因此您可能会得到预期的微小错误。

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

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

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

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

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

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

答案 1 :(得分:1)

您可以使用JavaScript toFixed()方法。

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