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