0

当我在 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'));
}
4

5 回答 5

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'));
}
于 2013-08-10T04:34:08.033 回答
2

你得到 a 的原因NaN是你的数组arr_K_t1的长度小于你的数组arr_P_t1

在您的for loop: 您正在尝试使用语句获取一个更大的数组元素

var K= arr_K_t1[i];

它返回undefined(因为你已经超过了 . 中的元素数量arr_K_t1。所以在 javascript 中,undefined如果你尝试访问一个不存在的数组元素,它会返回。

然后你正在对它进行数学运算,显然会返回NaN(你得到的结果)。

解决方案是这样的:

函数计算错误(){      
    arr_error_P_t2=新数组();

    //注释:您假设数组“arr_K_t1”的长度至少等于
    //数组“arr_P_t1”在后面的for循环中
    //这是一个错误的假设,最终导致“NaN”!!
    ...
    ...
    ...您的其余代码

编辑:我无法包含剩余的代码,因为它使帖子变得很奇怪。然而问题在于for loop他在哪里访问一个不存在的元素。

于 2013-08-10T04:51:50.220 回答
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'));
}
于 2013-08-10T03:43:33.097 回答
0

您必须在该数组中插入至少一项。

var arr_error_P_t2=[1]

于 2018-10-12T01:53:43.160 回答
-1

为什么一定要使用"new Number()"?如果你这样做,那将是一个对象。不能直接打印对象。

于 2013-08-10T03:39:06.733 回答