2017-03-08 10 views
0

私はギターのための完全なフレットボードを構築するためにluthierのためのすべての計算を行うことを意味している小さなデバイスでいくつかの問題を抱えています。jQuery数式の問題 - 不正確な結果またはNaN

http://codepen.io/JTBennett/pen/xqgGER

プログラムがcodepenにあり、これまでのところ、左半分は(距離計算値フレット)スパゲッティにもかかわらず、正常に動作します...私は疲れていました。あなたは以下の値で問題を再作成することができ

$("#fc_calc2").click(function() { 

    var T = $("#frN_12").html() 
    var St = $("input[id='St']").val() 
    var Sn = $("input[id='Sn']").val() 
    var X = (T)/((St/Sn) - 1) 
    $("#formula1").text(X.toFixed(3)) 

    var Rn = $("input[id='Rn']").val() 
    var D = $("input[id='radius']").val() 
    var Rd = ((Rn * (X + D))/X) 
    $("#formula2").text(Rd.toFixed(3)); 
    }); 

Scale Length = 25.1 (You must press this button to calculate the left side first) 

(E to E @ Nut) = 1.406 
(E to E @ 12th) = 1.719 
(Nut Radius) = 12 
(Radius Point) = 18.825 

発行プレゼント

しかし、私は、右側の最終的な計算(formula2)との問題を抱えています式2のフィールドに入力します。小数点のある半径の点の値をとると、結果はNaNになります。整数では、単にナット半径(12)の値を繰り返します。

私は数式が正しいことを再度確認しました。ここに基礎を見ることができます:http://www.stewmac.com/How-To/Online_Resources/Neck_Building_and_Repair_and_Setup/Compound_Radius_Explained.html ページの下部に、2番目の数式(2)で問題が発生しています。

ここで何が起こっているのでしょうか?私は世界で最大の数学魔術師ではないので、どんな助けでも大いに感謝します!

よろしく、 ジョエル

+1

( '.val)'常に** **文字列を返します。したがって、 '(X + D)'部分式は数値の加算ではなく文字列連結を実行します。 – Pointy

+0

'val()'は文字列を返します。 'parseFloat()'を使用して、計算で使用できる浮動小数点に変換する必要があります。 –

+0

**何もjQueryとは何も関係ありません。 – vsync

答えて

2

変更し、次の行:

var Rn = $("input[id='Rn']").val() 
var D = $("input[id='radius']").val() 
var St = $("input[id='St']").val() 
var Sn = $("input[id='Sn']").val() 

var Rn = parseFloat($("input[id='Rn']").val()); 
var D = parseFloat($("input[id='radius']").val()); 
var St = parseFloat($("input[id='St']").val()); 
var Sn = parseFloat($("input[id='Sn']").val()); 

にして、やり直してください。

説明:NaN (Not-a-Number)は数学的操作が失敗したときに頻繁に返されるjavascriptの不思議なグローバルオブジェクトです。このプロパティは、値が正当な数値ではないことを示します。

+0

最初のセクションの3行も 'var T'、' var St'、 'var Sn'です。 – Santi

+2

'parseInt()'はおそらく正しい選択ではありません。 'parseFloat()'または単なる '+'単項演算子のほうが良いでしょう。 – Pointy

+0

素早い応答をいただきありがとうございます - parsefloatオプションが完璧に動作しました – Joel

3

val()は文字列を返します。 2つの文字列を追加するだけでそれらを連結します。独立した+演算子を使用すると、別のコメントに記載されているPointyというように、すべての数値文字列を実際の浮動小数点数に変換できます。

var a = "1"; 
var b = "2"; 
console.log(a+b); //12 
var a = +"1"; 
var b = +"2"; 
console.log(a+b); //3 

$("#fc_calc2").click(function() { 

    var T = +$("#frN_12").html() 
    var St = +$("input[id='St']").val() 
    var Sn = +$("input[id='Sn']").val() 
    var X = (T)/((St/Sn) - 1) 
    $("#formula1").text(X.toFixed(3)) 

    var Rn = +$("input[id='Rn']").val() 
    var D = +$("input[id='radius']").val() 
    var Rd = ((Rn * (X + D))/X) 
    $("#formula2").text(Rd.toFixed(3)); 

}); 
+0

私はparsefloatパスを使用しましたが、これと私のJSONプロジェクトの間で、私は非常に便利なツールとしてコンソールを見始めています:} – Joel

+0

はい、それは命の恩人です:P –

関連する問題