2015-10-05 121 views
1

我對JavaScript很新,想將我的一個計算電子表格轉換爲我可以在網頁上使用的東西。但是,計算給我一個不正確的結果。JavaScript計算不正確的結果

這裏是我的JavaScript:

<script type="text/javascript" language="JavaScript"> 
     function calc() { 
      var onerepmax = document.wodCalculate.oneRepMax.value; 
      var percent = document.wodCalculate.percentOfOneRepMax.value/100; 
      var addkg = document.wodCalculate.plusKg.value; 
      var zwischenschritt = onerepmax * percent; 
      var gewicht = zwischenschritt + addkg; 
      document.getElementById("weight").innerHTML = gewicht; 
     }; 
</script> 

和這裏的HTML:

<form action="" id="wodCalculate" name="wodCalculate"> 
     <table cellspacing="0" cellpadding="10" border="0"> 
      <tr><td>1 Rep Max</td><td><input type=text name="oneRepMax" value="">&nbsp;kg<br></td></tr> 
      <tr><td>% vom 1RM</td><td><input type=text name="percentOfOneRepMax" value="">&nbsp;%<br></td></tr> 
      <tr><td>Plus x kg</td><td><input type=text name="plusKg" value="">&nbsp;kg<br></td></tr> 
      <tr><td><input type="button" value="Calculate" onClick="calc()"></td></tr> 
     </table> 
</form> 
<div id="weight">Weight</div> 

它的工作原理罰款與 「百分比」 乘以 「onerepmax」 的地步。但是,一旦達到了將「addkg」加到乘法結果(即給我「gewicht」)的地步,結果就會變得不正確。

例如,我想獲得100kg的10%,並增加10kg。代替20kg,計算結果爲1010.

感謝您的幫助!

+2

請參閱[Number()函數](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number) – Max

回答

2

input一個的value始終是一個字符串,所以+結束是字符串連接("10" + "10""1010",相對於10 + 10這是20)。

您可以轉換使用parseInt(value, 10)(10 =十進制,基數爲10),如果他們的意思是整數,例如,用戶輸入值:

var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10); 

這只是一個選項,但是,你有幾個:

  • 一元+操作:value = +value將字符串強制使用JavaScript引擎的標準規則,一些。該號碼可以具有小數部分(例如,+"1.50"1.5)。字符串中的任何非數字(除了用於科學記數法的e以外)都會產生結果NaN。另外,+""0,這可能不直觀。

    var onerepmax = +document.wodCalculate.oneRepMax.value; 
    
  • Number功能:value = Number(value)。與+一樣。

    var onerepmax = Number(document.wodCalculate.oneRepMax.value); 
    
  • parseInt功能,通常有一個基數(數鹼):value = parseInt(value, 10)。這裏的缺點是parseInt轉換它在字符串開頭找到的任何數字,但在字符串後面忽略非數字,所以parseInt("100asdf", 10)100而不是NaN。顧名思義,parseInt只解析整個數字。

    // (Same as the first one above) 
    var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10); 
    
  • parseFloat功能:value = parseFloat(value)。允許小數值,並始終以十進制(絕不是八進制或十六進制)工作。 parseInt是否與字符串末尾的垃圾相同,parseFloat("123.34alksdjf")123.34

    var onerepmax = parseFloat(document.wodCalculate.oneRepMax.value); 
    

所以,挑選你,以滿足您的使用情況的工具。 :-)

+0

幹得好,T.J.克勞德 –

1

問題是你「添加」一個字符串,而不是數字。 JavaScript中的+運算符具有多種語義,只要一個操作數是一個字符串,它就會執行字符串連接。

爲防止出現這種情況,請將字符串轉換爲帶有一元運算符+的數字。