2017-03-08 29 views
0

我遇到了一些麻煩,我正在製作一個小設備,它旨在執行所有的計算,以便爲一個吉他構建完美的指板。jQuery Math Formula問題 - 不正確的結果或NaN

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

該計劃是在codepen,到目前爲止,左半邊(FRET距離計算)工作正常,儘管意大利麪......我累了。

但我在與右側的最終計算(formula2)一個問題:

$("#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 

問題禮物在公式2字段中。用帶小數點的半徑點值,結果爲NaN。用整數,它只是重複了螺母半徑(12)的值。

我再次檢查我的公式是否正確 - 您可以在此處看到基礎:http://www.stewmac.com/How-To/Online_Resources/Neck_Building_and_Repair_and_Setup/Compound_Radius_Explained.html 在頁面底部,問題出現在第二個公式(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

第一部分的三行也是:var T','var St'和'var Sn'。 – Santi

+2

'parseInt()'可能不是正確的選擇;要麼是'parseFloat()',要麼更好,只是一元''''操作符。 – Pointy

+0

感謝您的快速響應 - parsefloat選項完美解決 – Joel

3

val()返回一個字符串。添加兩個字符串只是連接它們。您可以使用一元運算符+將所有數字字符串轉換爲實際的浮點數,因爲在單獨的註釋中提到了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 –