Javascript验证数组元素净和为零
我需要验证数组网络中元素的和是否为零。数组可以包含正值或负值。 阵列元素为1164.44、-2919.422500.59、-5197.154451.54 我不使用toFixed的代码是Javascript验证数组元素净和为零,javascript,arrays,sum,parsefloat,Javascript,Arrays,Sum,Parsefloat,我需要验证数组网络中元素的和是否为零。数组可以包含正值或负值。 阵列元素为1164.44、-2919.422500.59、-5197.154451.54 我不使用toFixed的代码是 var v_total=0; var v; var varray = document.getElementsByName('f02'); for (var i = 0; i < varray.length; i++) { v = (isNaN(parseFl
var v_total=0;
var v;
var varray = document.getElementsByName('f02');
for (var i = 0; i < varray.length; i++)
{
v = (isNaN(parseFloat(varray[i].value)))?0:varray[i].value;
v_total = parseFloat(cv_total) + parseFloat(v);
}
v_total = (isNaN(cv_total))?0:cv_total;
其结果为9.094947017729282e-13之和
如果我用计算器把它加起来,它的净值等于零
搜索了论坛,了解到这是浮点数的行为。
尽管使用了toFixed,我还是无法得到零和。此外,小数点后的位数可能会有所不同,并不总是2
询问如何解决此问题的任何建议
谢谢这很好用,有什么问题吗
var n=[1164.44,-2919.42,2500.59,-5197.15,4451.54];
s=n.reduce(function(x,y) {
return parseFloat((x+y).toFixed(2));
});
console.log(s);
jsidle here:您可以使用reduce和toPrecision: var-arr=[1164.44,-2919.42042500.5904,-5197.1514451.541]; var result=arr.reducefunctiona,b{return+a.toPrecision15++b.toPrecision15};
结果;你可以做一个Math.ceil/floor/round,测试原始结果的结果是否小于0.1谢谢你的建议。您还可以使用加号前缀:var arr=[1164.44,-2919.422500.59,-5197.154451.54];arr.reducefunctiona,b{return+a.toFixed2++b.toFixed2}vlaues是在一个文本中输入的,该文本是一个数组,它是可编辑的。当我输入整数或大负数而不是加法时,尽管使用了parseFloat,我还是得到了元素的串联。v_total+=parseFloatvarray[i].value.toFixed2;console.logv_总计;谢谢你,约翰,前面的+符号成功了。现在数字加起来了,但是我不能总是确定小数点后有两位数字。例如,5.468,-5.47不等于零,如果小数点后的数字不同,我如何计算toFixed?@RJD使用Number.prototype.toPrecision以您喜欢的精度计算。[5.468,-5.47]。reducefunctiona,b{return+a.toPrecision15++b.toPrecision15}您必须在此处设置15这样的精度,并验证用户添加的数字在本例中不大于您的参数15。@RJD我添加了一个带有Number.prototype.toprecision的答案谢谢Johann的建议,也谢谢您介绍我减少函数…我实现了您的solution@RJD我很高兴能帮上忙。你接受了另一个答案,但向上投票没有坏处: