我在JavaScript中使用此代码:
SolarPanels = parseInt(lRemainingWidth / (panel_width + ( 2 * lPanelInterSpace)));
然后我提醒SolarPanels
值,其中NaN
为输出,
alert("SolarPanels "+SolarPanels);
这一行只是一个庞大计算的一小部分,但我的代码似乎在这里失败,
使用提醒我已经读出了SolarPanels
,lRemainingWidth
,panel_width
和lPanelInterSpace
的值
以下是:
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
答案 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));