2

私はJavaScriptでこのコードを持っています:

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

そして、出力としてSolarPanels得られる値を警告し、NaN

alert("SolarPanels "+SolarPanels); 

この 1 行は巨大な計算のごく一部ですが、次のSolarPanelslRemainingWidthpanel_widthおよびの値を読み取ったアラートを使用すると、コードはここで失敗するようです。lPanelInterSpace

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 に答える