我制作的这个二次公式计算器无法正常工作。由于某种原因,它总是返回错误的值。我不知道为什么,js数学函数的逻辑和代码还可以。请帮我解决这个问题。
function calc(){
var a = parseInt(document.querySelector("#a").value);
var b = parseInt(document.querySelector("#b").value);
var c = parseInt(document.querySelector("#c").value);
root = Math.sqrt(b*b - (4 * a * c));
result1 = (-b + root) / 2 * a;
result2 = (-b - root) / 2 * a;
if(root * root > 0){
console.log(result1);
console.log(result2);
document.querySelector('#result1').innerHTML = "x = "+result1;
document.querySelector('#result2').innerHTML = "x = "+result2;
} else {
result1 = "No Solution";
document.querySelector('#result1').innerHTML = result1;
}
}
最佳答案
一个问题是
(-b + root) / 2 * a;
(-b + root)
将除以2
,然后乘以a
。将(2 * a)
括在括号中以除以2a
。另一个问题是
if(root * root > 0){
// display solution
// else display "No Solution"
如果方程式是
x^2+2x+1=0
怎么办?则根为0,但有一个解,即x = -1。改成if(root * root >= 0){
另外,请尽量不要隐式分配给全局变量-在创建新变量时将
var
放在变量前面。function calc() {
var a = parseInt(document.querySelector("#a").value);
var b = parseInt(document.querySelector("#b").value);
var c = parseInt(document.querySelector("#c").value);
var root = Math.sqrt(b * b - (4 * a * c));
var result1 = (-b + root) / (2 * a);
var result2 = (-b - root) / (2 * a);
if (root * root > 0) {
console.log(result1);
console.log(result2);
document.querySelector('#result1').innerHTML = "x = " + result1;
document.querySelector('#result2').innerHTML = "x = " + result2;
} else {
document.querySelector('#result1').innerHTML = "No Solution";
}
}
<input id="a"><input id="b"><input id="c">
<div id="result1"></div>
<div id="result2"></div>
<button onclick="calc()">calc</button>