2

我在 JavaScript 中有这段代码:

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

然后我提醒作为输出SolarPanels给出的值,NaN

alert("SolarPanels "+SolarPanels); 

这 1 行是一个巨大计算的一小部分,但我的代码似乎在这里失败了,使用警报我已经读出了 , 的值,它们SolarPanels如下 :lRemainingWidthpanel_widthlPanelInterSpace

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

我认为它与 2 点有关lRemainingWidth,无论哪种方式,我都不知道如何解决它。为什么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
4

3 回答 3

8

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

在任何计算之前从这段代码开始:

var roof_ridge = parseFloat(roof_ridge);

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

于 2013-02-26T07:37:05.843 回答
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将其参数强制转换为数字。

于 2013-02-26T07:39:04.960 回答
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));
于 2013-02-26T07:39:30.520 回答