JavaScript计算中的结果不正确

时间:2015-10-05 09:58:24

标签: javascript calc

我对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”),结果就会变得不正确。

例如,我想获得100公斤的10%并增加10公斤。而不是20千克,计算结果是1010。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

value的{​​{1}}始终是字符串,因此input最终成为字符串连接(+"10" + "10",而不是"1010" 1}}这是10 + 10)。

如果您正在使用20(OP不是,但其他人可能会找到此答案)并且浏览器支持它们,则可以使用valueAsNumber代替:

input type="number"

如果您使用的是var onerepmax = document.wodCalculate.oneRepMax.valueAsNumber; ,或者浏览器不支持type="text"

如果用户输入值是整数,则可以使用valueAsNumber(10 =十进制,基数为10)转换用户输入值,例如:

parseInt(value, 10)

这只是一个选择,但你有几个:

  • 一元var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10); 运算符:+将使用JavaScript引擎的标准规则将字符串强制转换为数字。该数字可以具有小数部分(例如,value = +value+"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)转换它在字符串开头找到的任何数字但忽略字符串后面的非数字,因此parseIntparseInt("100asdf", 10) ,而不是100。顾名思义,NaN只解析整数。

    parseInt
  • // (Same as the first one above) var onerepmax = parseInt(document.wodCalculate.oneRepMax.value, 10); 函数:parseFloat。允许小数值,并始终以十进制(从不八进制或十六进制)工作。 value = parseFloat(value)对字符串末尾的垃圾做同样的事情parseIntparseFloat("123.34alksdjf")

    123.34

因此,选择适合您用例的工具。 : - )

答案 1 :(得分:1)

问题在于你是否正在添加&#34;一个字符串,而不是一个数字。 JavaScript中的+运算符具有多个语义,只要一个操作数是一个字符串,它就会进行字符串连接。

为防止这种情况,请使用一元+运算符将字符串转换为数字。