2013-02-26 46 views
0

我有這樣的代碼在JavaScript:獲得NaN的錯誤,想不通爲什麼

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

,然後我提醒SolarPanels值給出NaN作爲輸出,

alert("SolarPanels "+SolarPanels); 

這1線是一個巨大的計算的一小部分,但我的代碼似乎在這裏失敗, 與使用警報我已經讀出SolarPanels,lRemainingWidth,panel_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 
+0

也許你的一些變量值是/不是你的想法。 'console.log()'或'alert()'它們在計算之前。 – Teemu 2013-02-26 07:37:03

回答

4

你的問題是,你混合字符串和數字

與此代碼開始任何計算之前:

var roof_ridge = parseFloat(roof_ridge); 

有可能是其他字符串藏在你的代碼,但我們沒有看到他們。對它們應用相同的轉換。

+0

這似乎有幫助,非常感謝,問題是,我得到了一個字符串的餅乾的屋頂_ridge,parseFloat幫助!非常感謝!我會將其標記爲答案。 – notknown7777 2013-02-26 07:41:57

1
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脅迫其參數爲一個數字。

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)); 
相關問題