- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Html+Javascript 上使用以下解决方案进行二次方程求解器
在我的html表单中,我在ax^2+bx+=0中有3个文本框代表a,b,c,3个comcobox(选项)用于将a,b,c设置为+或-,如
当组合框更改时,我通过触发这些函数成功收到了 +、- 符号
function changeasign()
{
signa=document.getElementById("signa").value;
}
function changebsign()
{
signb=document.getElementById("signb").value;
}
function changecsign()
{
signc=document.getElementById("signc").value;
}
然后,当按下按钮时,调用此函数
function cal()
{
var a = document.getElementById("a").value;
if(a=="")
{
a=1;
}
var b = document.getElementById("b").value;
if(b=="")
{
b=1;
}
var c = document.getElementById("c").value;
if(c=="")
{
c=0;
}
var first;
var rawdis;
var dis;
var divide;
var x1;
var x2;
if(signa=="+" && signb=="+" && signc=="+")// +,+,+
{
first=-b;
rawdis=Math.pow(b,2)-4*a*c;
if(rawdis<0)
{
document.getElementById("ans").innerHTML = "This equation doesn't have realnumber as answers";
return;
}
dis=Math.sqrt(rawdis);
divide=2*a;
x1=(first+dis)/divide;
x2=(first-dis)/divide;
document.getElementById("ans").innerHTML = "X="+x1+","+x2;
}
else if(signa=="+" && signb=="+" && signc=="-")
{
//Loops through +,+,- +,-,+ +,-,-
这个工作正常,如果我输入 +1x^2+2x+1 它将返回 X=-1,-1
问题来了:任何包含signb==“-”的if、else if给出第一个答案,但正确给出第二个答案
本例:
else if(signa=="+" && signb=="-" && signc=="+")
{
first=b;
rawdis=Math.pow(b,2)-4*a*c;
if(rawdis<0)
{
document.getElementById("ans").innerHTML = "This equation doesn't have realnumber as answers";
return;
}
dis=Math.sqrt(rawdis);
divide=2*a;
x1=(first+dis)/divide;
x2=(first-dis)/divide;
document.getElementById("ans").innerHTML = "X="+x1+","+x2;
}
输入:+x^2-6x+9 输出:X=30,3 正确答案:X=3,3
当我设置它显示所有变量时输出:first=6;原始磁盘=0; dis=0;除=2; x1=30; x2=3; x1 如何变成 30?
此外,所有其他 B 符号为“-”的人都在 x1 上给出了错误的答案,没有任何模式,即使所有先前的变量都是正确的!现在我通过将其反射(reflect)到方程的另一边并根据该方程进行计算来修复它
ax^2-bx+c=0 转换为 -ax^2+bx-c=0 这有效。但我只是想知道为什么会出现这个bug?不应该,因为这是一个简单的数学
最佳答案
该问题是由于 JavaScript 的松散类型造成的。它认为 b
是一个字符串,因此当它尝试执行 first+dis
而不是数字相加时,会进行字符串连接 "6"+"0"
给出“60”
。它足够智能,可以在所有其他操作中转换为数字格式。
为了解决这个问题
a = parseFloat(a);
b = parseFloat(b);
c = parseFloat(c);
附:如果你找到 a、b、c 的签名版本,你的代码将会整洁很多
if(signa=="-")
a = -a;
这样你就可以消除 if 语句中的所有重复代码。
关于Javascript 二次方程求解器 BUG - 需要解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22889852/
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
我求解 jQuery 二次方程的代码有什么问题? a = parseFloat($('#a').val()); b = parseFloat($('#b').val()); c = parseFloa
我应该在 matlab 代码中加入什么条件才能使用这些公式得到二次方程的精确解: x1=(-2*c)/(b+sqrt(b^2-4*a*c)) x2=(-2*c)/(b-sqrt(b^2-4*a*c))
我正在做一项学校作业。我应该实现一个类并提供方法 getSolution1 和 getSolution2。但是,我的代码有 2 个我无法弄清楚的问题。 问题 #1 在这一行: solution1= (
如果这个问题很简单,我很抱歉,但我是 C++ 的新手。我正在设计一个使用二次公式计算 2 个根的程序。但是,当我的判别式为负数时,我的程序不起作用。 #define _USE_MATH_DEFINES
我对 Javascript 不太熟悉。我希望有人能简单地解释一下编辑以下代码的过程。 this.hideNextButton(); this.hidePreviousButton(); var tha
我是一名优秀的程序员,十分优秀!