JavaScript indexOf()当数组中存在十进制值时,给出-1的方法

时间:2013-04-16 11:50:50

标签: javascript

我在使用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吗?如果是这样,或者出于任何理由,如果有人可以建议修复我会非常感激。

非常感谢

1 个答案:

答案 0 :(得分:2)

严格比较双数不是一个好主意。你在这里观察到的可能是舍入误差。虽然这些数字对你来说似乎是相同的,但它们可能因小的epsylon而不同。

我看到的一个选项是使用epsylon比较使用custom indexOf function(即允许数字相差较小的值。例如0.0000000000011e-12)。