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

JavaScript indexOf() Method giving -1 when decimal value is present in array

本文关键字:十进制 存在 indexOf 方法 数组 JavaScript      更新时间:2023-09-26

我在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的差异。

我看到的一个选项是使用自定义indexOf函数使用epsylon比较(即允许数字有一个小的数值差异。例如0.0000000000011e-12)。