我对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=""> kg<br></td></tr>
<tr><td>% vom 1RM</td><td><input type=text name="percentOfOneRepMax" value=""> %<br></td></tr>
<tr><td>Plus x kg</td><td><input type=text name="plusKg" value=""> 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。
感谢您的帮助!
答案 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)
转换它在字符串开头找到的任何数字但忽略字符串后面的非数字,因此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
因此,选择适合您用例的工具。 : - )
答案 1 :(得分:1)
问题在于你是否正在添加&#34;一个字符串,而不是一个数字。 JavaScript中的+
运算符具有多个语义,只要一个操作数是一个字符串,它就会进行字符串连接。
为防止这种情况,请使用一元+
运算符将字符串转换为数字。