我正在尝试对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!
在其他时候,我已经取得了如此多的小数位数的结果,我不得不四舍五入
但在这种情况下,使用这些数字,这种错误是荒谬的。
答案 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),这是你沿途的精确损失