我在使用 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
但是,当我通过在以下行中将 setlat 替换为 pointLatArray[8] 来更改代码时....
pointArrayIndex = pointLatArray.indexOf(pointLatArray[8]);
以下内容被记录到控制台,它显示正确的索引 8 而不是预期的 -1......
04-16 12:46:17.230: D/CordovaLog(8497): 52.6688391881732 52.6688391881732 8
是因为我使用了这么长的小数集作为变量 setlat 吗?如果是这样,或者出于任何原因,如果有人可以提出修复建议,我将非常感激。
非常感谢
最佳答案
对双数进行严格比较不是一个好主意。您在这里观察到的可能是舍入误差。尽管这些数字对您来说似乎相同,但它们可能相差一个小 epsylon。
我看到的一个选项是使用 custom indexOf function使用 epsylon 比较(即允许数字相差一个小值。例如 0.000000000001
或 1e-12
)。
关于JavaScript indexOf() 方法在数组中存在十进制值时给出 -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16036273/