JavaScript计算中的结果不正确

JavaScript计算中的结果不正确,javascript,calc,Javascript,Calc,我对JavaScript相当陌生,希望将我的一个计算电子表格转换成可以在网页上使用的东西。然而,计算给了我一个不正确的结果 以下是我的JavaScript: <script type="text/javascript" language="JavaScript"> function calc() { var onerepmax = document.wodCalculate.oneRepMax.value; var pe

我对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>

函数计算(){
var onerepmax=document.wodCalculate.onerepmax.value;
var percent=document.wodCalculate.Percentofenerepmax.value/100;
var addkg=document.wodCalculate.plusKg.value;
var zwischenschritt=onerepmax*百分比;
var gewicht=zwischenschritt+addkg;
document.getElementById(“权重”).innerHTML=gewicht;
};
下面是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>

1次重复最大重量
%vom 1RM%
加上x千克
重量
它工作得很好,可以将“onerepmax”与“percent”相乘。但是,一旦达到将“addkg”添加到乘法结果的程度(即,给我“gewicht”),结果就不正确了

例如,我想得到100公斤的10%,再加上10公斤。计算结果不是20kg,而是1010


谢谢你的帮助

输入的
值始终是字符串,因此
+
最终是字符串连接(
“10”+“10”
“1010”
,而
10+10
20

如果您使用的是
输入类型=“number”
(OP不是,但其他找到此答案的人可能会这样做),并且浏览器支持它们,您可以使用:

如果您正在使用
type=“text”
或浏览器不支持
valueAsNumber

您可以使用
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)
    。允许分数值,并且始终以十进制(从不以八进制或十六进制)工作。对字符串末尾的垃圾执行相同的操作,
    parseFloat(“123.34alksdjf”)
    123.34

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

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

问题是您“添加”的是字符串,而不是数字。JavaScript中的
+
运算符有多种语义,只要一个操作数是字符串,它就会进行字符串连接


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

请参阅好工作,T.J.Crowder
var onerepmax = parseFloat(document.wodCalculate.oneRepMax.value);