输入字段值未正确累加

时间:2012-07-16 14:33:23

标签: javascript jquery

  

可能重复:
  Is JavaScript's Math broken?

我试图添加三个输入字段,每个输入字段的值为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);
};

1 个答案:

答案 0 :(得分:1)

欢迎来到浮点数的精彩世界。浮点是您想要表示的数字的近似值。因此,当您将数字保存为33.3时,它会出现但不完全33.3,此错误会在多次操作后累加。比较浮点数的最佳方法是不测试相等性,而是测试它们在一定范围内的天气。

而不是

if(x == 99.9)

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

如果您只想要字符串表示。您可以尝试将浮点数作为整数处理。即33.3等于333,然后当您将其重新转换为字符串时,您可以在适当的位置添加小数。这将是解决您问题的最佳方案。