2015-10-05 86 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中的+运算符具有多种语义,只要一个操作数是一个字符串,它就会执行字符串连接。

为防止出现这种情况,请将字符串转换为带有一元运算符+的数字。