当我在javascript中执行此函数时,我得到NaN结果。看起来非常不合逻辑,因为在这个操作中使用的数组都是数字的,并且在我使用Alert()时正确显示;我把代码留在这里供你监督:
function calculation_errors(){
arr_error_P_t2=new Array();
for(var i=0;i<arr_P_t1.length;i++){
var K=new Number(arr_K_t1[i]);
var P=new Number(arr_P_t1[i]);
arr_error_P_t2[i]=(Math.sqrt(1+Math.pow(m_t2,2)))*(Math.sqrt((Math.pow(1/K,2)+(Math.pow(1/P,2)))));
}
alert(arr_error_P_t2.join('\n'));
}
答案 0 :(得分:2)
而是使用new Number()
,只需将您的值乘以1 (your_val * 1)
即可。它是将值转换为整数的最简单,最快捷的方法。
function calculation_errors() {
arr_error_P_t2 = [];
for (var i = 0; i < arr_P_t1.length; i++) {
var K = arr_K_t1[i] * 1;
var P = arr_P_t1[i] * 1;
arr_error_P_t2[i] = (Math.sqrt(1 + Math.pow(m_t2, 2))) * (Math.sqrt((Math.pow(1 / K, 2) + (Math.pow(1 / P, 2)))));
}
alert(arr_error_P_t2.join('\n'));
}
答案 1 :(得分:2)
获得NaN
的原因是因为您的数组arr_K_t1
的长度小于数组arr_P_t1
。
在for loop
中:
您正在尝试使用语句
var K= arr_K_t1[i];
它返回undefined
(因为你已超过arr_K_t1
中的元素数。所以在javascript中,如果你试图访问一个不存在的数组元素,它会返回undefined
。
然后你正在对它进行数学运算,这显然会返回NaN
(你得到的结果)。
解决方案是:
function calculation_errors(){ arr_error_P_t2=new Array(); //COMMENT : You are assuming array "arr_K_t1" is atleast of length equal to //array "arr_P_t1" in the for loop that follows //THIS IS A WRONG ASSUMPTION AND IS LEADING TO THE "NaN" at the end !! ... ... ...rest of your code
编辑:我无法包含剩余的代码,因为它使帖子很奇怪。但问题在于for loop
他正在访问一个不存在的元素。
答案 2 :(得分:0)
不要将数字转换为对象,这应解决您的NaN问题。
function calculation_errors(){
arr_error_P_t2=new Array();
for(var i=0;i<arr_P_t1.length;i++){
var K= arr_K_t1[i];
var P= arr_P_t1[i];
arr_error_P_t2.push((Math.sqrt(1+Math.pow(m_t2,2)))*(Math.sqrt((Math.pow(1/K,2)+(Math.pow(1/P,2))))));
//I prefer .push() but you don't have to use this part
}
alert(arr_error_P_t2.join('\n'));
}
答案 3 :(得分:0)
您必须在该数组中插入至少一项。
var arr_error_P_t2=[1]
答案 4 :(得分:-1)
为什么必须使用"new Number()"
?如果你这样做,那将是一个对象。
物体无法直接打印。