得到NaN错误,无法弄清楚原因

时间:2013-02-26 07:33:42

标签: javascript math

我在JavaScript中使用此代码:

SolarPanels = parseInt(lRemainingWidth / (panel_width + ( 2 * lPanelInterSpace)));

然后我提醒SolarPanels值,其中NaN为输出,

alert("SolarPanels "+SolarPanels); 

这一行只是一个庞大计算的一小部分,但我的代码似乎在这里失败, 使用提醒我已经读出了SolarPanelslRemainingWidthpanel_widthlPanelInterSpace的值 以下是:

lRemainingwidth = 17.4.320227272727276
SolarPanels = 0
panel_width = 1.65
lPanelInterSpace = 0.02

我认为它与lRemainingWidth中的2个点有关,无论哪种方式,我都不知道如何修复它。为什么lRemainingWidth有2个点?


更新:

这是计算lRemainingWidth的部分:

    if(HalforDouble === "Yes")
    {
        lRemainingWidth = (roof_ridge /2) + ((lRemainingHeight / Math.tan((lRoofEdgeDegrees * Math.PI) / 180)) - lRoofEdge);            
    }

    else
    {
        lRemainingWidth = roof_ridge + (2 * ((lRemainingHeight / Math.tan((lRoofEdgeDegrees * Math.PI) / 180)) - lRoofEdge));
    }

这里的值是:

lRemainingWidth = 0
roof_ridge = 17
lRemainingHeight = 20.769000000000002
lRoofEdgeDegrees = 83.5169263071276
lRoofEdge = 0.2

3 个答案:

答案 0 :(得分:7)

你的问题是你混合字符串和数字

在进行任何计算之前先从此代码开始:

var roof_ridge = parseFloat(roof_ridge);

您的代码中可能隐藏了其他字符串,但我们看不到它们。对它们应用相同的转换。

答案 1 :(得分:2)

lRemainingWidth = roof_ridge + (2 * ((lRemainingHeight / Math.tan((lRoofEdgeDegrees * Math.PI) / 180)) - lRoofEdge));

如果roof_ridge是一个字符串,那么+会进行字符串连接而不是添加。

将此更改为

lRemainingWidth = +roof_ridge + (2 * ((lRemainingHeight / Math.tan((lRoofEdgeDegrees * Math.PI) / 180)) - lRoofEdge));

+中的前缀+roof_ridge运算符将其参数强制转换为数字。

答案 2 :(得分:1)

它似乎是roof_ridge变量中问题的基石。此变量是String类的实例,而不是数字。所以,当您编码时,请转到此行:

lRemainingWidth = roof_ridge + (2 * ((lRemainingHeight / Math.tan((lRoofEdgeDegrees * Math.PI) / 180)) - lRoofEdge));

完成下一次计算:

'17' + whatever_float_value = got string concatenation instead of number's sum.

要解决此问题,请添加:

lRemainingWidth = parseFloat(roof_ridge) + (2 * ((lRemainingHeight / Math.tan((lRoofEdgeDegrees * Math.PI) / 180)) - lRoofEdge));