0

可能的重复:
JavaScript 的数学被破坏了吗?

我正在尝试将三个输入字段相加,每个字段包含一个 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.3等于333然后当你把它变成一个字符串时,你在适当的地方添加小数。这将是您问题的最佳解决方案。

于 2012-07-16T14:37:13.933 回答