我制作的这个二次公式计算器无法正常工作。由于某种原因,它总是返回错误的值。我不知道为什么,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>

08-25 11:58