当我从数组中获取值时,为什么会出现NaN(不是一个数字)错误?

10 浏览
0 Comments

当我从数组中获取值时,为什么会出现NaN(不是一个数字)错误?

我正在使用三角测量计算用户的位置。

如果我使用数组值,输出结果为NaN NaN,但如果我硬编码值,它按预期正常工作,并输出以下结果:

从数组中获取值:

    var beaconCoordinates = [[10,20], [200,300], [50,500]];
    //从数组中获取值
    var aX = parseInt(beaconCoordinates[0,0]);
    var aY = parseInt(beaconCoordinates[0,1]);
    var bX = parseInt(beaconCoordinates[1,0]);
    var bY = parseInt(beaconCoordinates[1,1]);
    var cX = parseInt(beaconCoordinates[2,0]);
    var cY = parseInt(beaconCoordinates[2,1]);

硬编码的值:

    var aX = 2;
    var aY = 4;
    var bX = 5.5;
    var bY = 13;
    var cX = 11.5;
    var cY = 2;

以下是剩余的代码:

    var dA = 5.7;
    var dB = 6.8;
    var dC = 6.4;
    //三边测量/三角测量公式
    var S = parseInt((Math.pow(cX, 2.) - Math.pow(bX, 2.) + Math.pow(cY, 2.) - Math.pow(bY, 2.) + Math.pow(dB, 2.) - Math.pow(dC, 2.)) / 2.0);
    var T = parseInt((Math.pow(aX, 2.) - Math.pow(bX, 2.) + Math.pow(aY, 2.) - Math.pow(bY, 2.) + Math.pow(dB, 2.) - Math.pow(dA, 2.)) / 2.0);
    var y = ((T * (bX - cX)) - (S * (bX - aX))) / (((aY - bY) * (bX - cX)) - ((cY - bY) * (bX - aX)));
    var x = ((y * (aY - bY)) - T) / (bX - aX);
    //用户的x和y位置
    console.log(x,y);

有人能解释一下这个吗?我很困惑。

0
0 Comments

问题的原因是代码中尝试访问一个值arr[0,0],而实际上应该使用arr[0][0]来获取一个值。解决方法是逐个获取数组中的值,如下所示:

var beaconCoordinates = [[10,20], [200,300], [50,500]];
//从数组中获取值
var aX = parseInt(beaconCoordinates[0][0]);
var aY = parseInt(beaconCoordinates[0][1]);
var bX = parseInt(beaconCoordinates[1][0]);
var bY = parseInt(beaconCoordinates[1][1]);
var cX = parseInt(beaconCoordinates[2][0]);
var cY = parseInt(beaconCoordinates[2][1]);
console.log(cY);

另外,如果使用`parseInt`函数,还应该传递一个基数参数(radix parameter),以指定要解析的数字的进制。详情请参考以下链接:

- [为什么我们需要使用基数参数?](https://stackoverflow.com/questions/6611824)

- [parseInt函数的使用文档](http://www.w3schools.com/jsref/jsref_parseint.asp)

0
0 Comments

当从数组中获取值时,出现NaN(Not a number)错误的原因是访问数组的方式有轻微错误。解决方法是使用parseInt(beaconCoordinates[0][0]),而不是parseInt(beaconCoordinates[0,0])。有时候,即使你花几个小时看着代码,也可能会忽视这种错误,所以有时候需要另一双眼睛来发现最微小的问题。

0