2015-07-19 128 views
-1

我试图找到两点之间的距离。函数返回NaN

这是我的距离函数。

var distance = function(first, second) { 
     var midValue = first - second; 
     midValue *= midValue; 
     return Math.sqrt(midValue); 
    } 

这就是我称之为距离函数的地方。

xDist += distance(locations[i].x, students[j][0]); 

当我看着xDist的价值时,我得到了NaN。我已经隐含地看到了他们都是数字的位置和学生的价值。此外,在距离函数中,我在返回它之前查看了Math.sqrt(midValue)的值,它是一个数字。

+1

你想要的距离添加到它之前初始化'xDist'到'0'? – Pointy

+1

不,不要使用'parseInt()',除非你有充分的理由这样做。 – Pointy

+2

等一下,你正在平方midValue,然后平方根呢?为什么? – Shadow

回答

1

我的猜测是,locations[i].x和/或students[j][0]是/是在undefinedundefined因为算术运算或,也许他们不是摆在首位号码,因此总是输出NaN

+0

最合理的情况 – vinayakj

-1

虽然它似乎数量也可能不总是数字。所以最好做一个parseInt。

var distance = function(first, second) { 
     var midValue = parseInt(first) - parseInt(second); 
     midValue *= midValue; 
     return Math.sqrt(midValue); 
    } 
+3

真的没有证据表明问题涉及非数值。即使是这样,''''和'* ='操作符也会执行转换。我们也不知道OP是否真的想用整数工作。 – Pointy

1

您需要指定一个xDist = 0的初始值,否则它将是未定义的。 不确定+ 10 = NaN的

你可以试试这个

var distance = function(first, second) { 
     var midValue = first - second; 
     midValue *= midValue; 
     return Math.sqrt(midValue); 
    } 

var xDist=0; 
xDist += distance(locations[i].x, students[j][0]); 
alert(xDist); 
+1

xDist是之前定义的。抱歉,我忘了添加该部分。 – Barte