我在使用JavaScript indexOf()方法时遇到了一些麻烦。我有一个阵列......
pointLatArray = new Array();
当我尝试获取我知道的变量的索引存在于数组中时,它返回-1,我知道通常指示未找到的值。当我的代码如下..
setlat = 52.6688391881732;
pointArrayIndex = pointLatArray.indexOf(setlat);
console.log(setlat + " " + pointLatArray[8] + " " + pointArrayIndex);
我将以下内容记录到控制台.....
04-16 12:35:31.370: D/CordovaLog(7048): 52.6688391881732 52.6688391881732 -1
但是,当我通过在下一行中用pointLatArray [8]替换setlat来更改代码时....
pointArrayIndex = pointLatArray.indexOf(pointLatArray[8]);
以下内容将记录到控制台,其中显示正确的索引8而不是-1,如预期的那样.......
04-16 12:46:17.230: D/CordovaLog(8497): 52.6688391881732 52.6688391881732 8
是因为我使用这么长的小数组作为变量setlat吗?如果是这样,或者出于任何理由,如果有人可以建议修复我会非常感激。
非常感谢
答案 0 :(得分:2)
严格比较双数不是一个好主意。你在这里观察到的可能是舍入误差。虽然这些数字对你来说似乎是相同的,但它们可能因小的epsylon而不同。
我看到的一个选项是使用epsylon比较使用custom indexOf function(即允许数字相差较小的值。例如0.000000000001
或1e-12
)。