我使用Javascript和HTML制作了一个二次方程式求解器,但是当我单击“计算”按钮时,它只获取了“ a”和“ c”值,然后乘以-1。
我是Java语言的初学者,所以我不太了解对象。
这是代码:
var a, b, c, xone, xtwo;
function getValues() {
function getValues() {
if (document.getElementById('signone').value == "+") {
a = document.getElementById('vara').value;
} else {
a = document.getElementById('vara').value * (-1);
}
if (document.getElementById('signtwo').value == "+") {
b = document.getElementById('varb').value;
} else {
b = document.getElementById('varb').value * (-1);
}
if (document.getElementById('signthree').value == "+") {
c = document.getElementById('varc').value;
} else {
c = document.getElementById('varc').value * (-1);
}
}
}
function getSolution() {
xone = ((-1 * b) + Math.sqrt((b * b) - 4 * a * c)) / (2 * a);
xtwo = ((-1 * b) - Math.sqrt((b * b) - 4 * a * c)) / (2 * a);
}
function showSolution() {
document.getElementById('showone').innerHTML = "x1 = " + xone;
document.getElementById('showtwo').innerHTML = "x2 = " + xtwo;
}
<h1> Quadratic equation calculator </h1>
<p>This calculator is going to find the two values of <i>x</i> of the equation typed.</br>In order to use it properly, you have to fill all of the boxes</br>
and click <q>ok</q>
</p>
</br>
<form>
<select id="signone">
<option value="+">+</option>
<option value="-">-</option>
</select>
<input id="vara" type="text" name="firstvar" placeholder="type the coeficient a" />x2
<select id="signtwo">
<option value="+">+</option>
<option value="-">-</option>
</select>
<input id="varb" type="text" name="secondvar" placeholder="type the coeficient b " />x
<select id="signthree">
<option value="+">+</option>
<option value="-">-</option>
</select>
<input id="varc" type="text" name="thirdvar" placeholder="type the coeficient c" />=0
</form>
</br>
<button type="button" onclick="getValues();getSolution();showSolution();">Calculate</button>
<p id="showone">X1 =</p>
</br>
<p id="showtwo">X2 =</p>
最佳答案
从文本输入中获取值时,该值是字符串,而不是Javascript中的数字。这就是为什么每次对其执行操作都会导致NaN的原因。例如,正在发生的是'3'* -1,这会导致NaN,因为'3'不是数字。 3是数字,但'3'(作为字符串)不是。
有一个简单的解决方案。您可以使用parseInt()
将字符串值转换为整数。但是,如果输入十进制数字,最好使用parseFloat
。例如,正确的代码如下所示:
a = parseFloat(document.getElementById('vara').value) * (-1)
在许多情况下,您还会违反DRP规则,“不要重复自己”,因为您的代码具有很高的重复性,并且可以通过迭代循环更轻松地进行分解。每当您拥有一堆“ if”语句时,通常可以将其分解为一个循环。我会给你这样做的挑战。
如下所述(我错过了),您还具有两次功能,这是一个问题。