2017-07-12 54 views
0

我目前正在努力獲得下面的calcRatio函數正確計算。這可能是基本的數學! 的以下函數按預期方式工作:簡單函數參數

function calcRatio(){ 
    var r = frontRing.value/backCog.value; 
    return r; 
} 

例如frontRing = 52,backCog = 11,R = 4.7272 ....

的下面給我錯誤的結果:

function calcRatio(){ 
    var r = frontRing.value/(backCog.value + 5); 
    return r; 
} 

例如frontRing = 52,backCog = 11 r = 0.4521。

我最終希望5與參數交換。

我也無法將frontRing和backCog變量設置爲.value的值,而不在函數內部執行。這是否會導致問題?

Codepen link

+0

應登錄的'backCog.value + 5' ... –

回答

1

當您所期望的提取的值是一個字符串,並具有附加的計算,優選使用任一

parseInt(value , 10) - for integers 
parseFloat(value) - for decimals 

在用例var r = frontRing.value/(backCog.value + 5);

backCog.value是一個字符串因爲它是輸入元素的值。當您使用+添加數字時,它會執行連接而不是添加。

var backCogValue = backCog.value; // "11"; 

"11" + 5 --> 115和你預期的不16

因此,編寫這段代碼的正確方法是在添加數字之前使用上述任一方法。

var frontRingValue = parseFloat(frontRing.value); 
var backCogValue = parseFloat(backCog.value); 

var r = (frontRingValue/ (backCogValue + 5)).toFixed(4); 

toFixed是用來格式化成你期望的小數點後的數字。

如果5是傳遞給函數的參數,那麼你的代碼看起來像

function calcRatio(param) { 
    var frontRingValue = parseFloat(frontRing.value); 
    var backCogValue = parseFloat(backCog.value); 
    var paramValue = parseFloat(paramValue); 

    var r = (frontRingValue/ (backCogValue + paramValue)).toFixed(4); 
} 
+0

*「,結果當你玩周圍有數字......「*只有在想要將字符串值轉換爲數字時纔有效。 –

+0

@FelixKling正確。 'elem.value'的返回值是字符串 –

+0

沒錯,但是你使它聽起來像一個人在處理數字時總是應該使用'parse *'。如果你解釋什麼時候沒有將''的值轉換爲數字,這會更有用。 –