JavaScript有时只返回答案

JavaScript有时只返回答案,javascript,html,math,Javascript,Html,Math,我一直在探索JavaScript,并致力于制作一个可以计算两个答案的二次方程的计算器。我遇到了这样一个问题,有时当我知道真正的答案时,公式返回NaN。例如,使用1表示b,-5表示a,-14表示c返回“NaN,NaN”,但应为7,-2。这是有原因的还是我的代码中有bug?提前谢谢 function quadForm(){ var b=document.getElementById(“oppb”).value; var a=document.getElementById(“a”).value; v

我一直在探索JavaScript,并致力于制作一个可以计算两个答案的二次方程的计算器。我遇到了这样一个问题,有时当我知道真正的答案时,公式返回NaN。例如,使用1表示b,-5表示a,-14表示c返回“NaN,NaN”,但应为7,-2。这是有原因的还是我的代码中有bug?提前谢谢

function quadForm(){
var b=document.getElementById(“oppb”).value;
var a=document.getElementById(“a”).value;
var c=document.getElementById(“c”).value;
var ansplsunrd=(-1*b+Math.sqrt(Math.pow(b,2)-(4*a*c))/(2*a);
var ansmnsunrd=(-1*b-Math.sqrt(Math.pow(b,2)-(4*a*c))/(2*a);
document.getElementById(“结果”).innerHTML=ansplsunrd+,“+ansmnsunrd;
}
二次计算器

b:

a:

c:



算计

此处显示的结果

我通过为等式的每个部分添加变量,找到了如何更正错误并使代码看起来更干净的方法。我将使b相反的过程、2a的划分和b^2-4ac的幂分开。然后在代码段中生成if/else语句。感谢那些指出消极歧视问题的人,这正是我来到这里的原因。我只需要在答案上加上一个“I”就可以了

function quadForm(){
var b=document.getElementById(“oppb”).value;
var a=document.getElementById(“a”).value;
var c=document.getElementById(“c”).value;
var discrim=数学功率(b,2)-(4*a*c);
var divby=2*a;
var oppb=-1*b;
if(discrim<0){
var negrt=(oppb+Math.sqrt((discrim*-1))/(divby);
var posrt=(oppb-Math.sqrt((discrim*-1))/(divby);
document.getElementById(“结果”).innerHTML=negrt+“i”+,“+posrt+“i”;
}否则{
var ansplsunrd=(-1*b+Math.sqrt(Math.pow(b,2)-(4*a*c))/(2*a);
var ansmnsunrd=(-1*b-Math.sqrt(Math.pow(b,2)-(4*a*c))/(2*a);
document.getElementById(“结果”).innerHTML=ansplsunrd+,“+ansmnsunrd;
}
}
二次计算器

b:

a:

c:



算计

此处显示的结果

我怀疑问题在于您从网页中解析
a、b、c
,而不是将它们插入公式时发生的情况。也许你应该把它们显式地转换成数字。值是一个字符串。让JavaScript动态地将它们强制为数字是不可靠的。JS Math不支持复数,因此
Math.sqrt(负数)
是NaN。您必须检查判别式的符号并自己处理复杂的根@Ivar啊,我不小心误读了,以为它被声明为
a=1,b=-5
,这将产生OPNote所期望的结果,您可以重用else分支中已经计算过的变量。@georg绝对!我只是在偷懒,利用我当时拥有的。我已经用适当的变量替换了else函数。