Javascript简单总结bug

时间:2017-09-08 08:40:58

标签: javascript floating-point sum

我正在尝试对10个数字元素的数组进行简单求和 我得到一个完全不正确的结果,只会出现一些特定值的数组,否则效果会很好。

var sum = 0;
var values = [14, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4];
for (var i = 0; i < values.length; i++) {
  var v = values[i];
  sum += v;
}
console.log(sum);

预期结果为0,但奇怪的是-2.22!
在其他时候,我已经取得了如此多的小数位数的结果,我不得不四舍五入 但在这种情况下,使用这些数字,这种错误是荒谬的。

2 个答案:

答案 0 :(得分:0)

你的代码工作得很好,它与浮动的不精确有关。当您在计算之前将每个值乘以10(因此1.4变为14)时,最终结果为0.

另见How to deal with floating point number precision in JavaScript?

var sum = 0;
var values = [14, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4, -1.4];
for(var i=0; i<values.length; i++){
    var v = values[i];
    sum += (v * 10);
}
sum = sum / 10;
console.log(sum);

答案 1 :(得分:0)

console.log(1.3999999999999977 + -1.4);

最后由于你在上面的表达式上操作的精度损失,这相当于2.2 * 10 ^( - 15),这是你沿途的精确损失