我需要将从prompt
返回的字符串转换为等式,但parseFloat
仅返回第一个数字和等式中的符号,并在变量处停止。变量将始终为= x
。该程序旨在将代数表达式15*x(5^4-56)*17/x=15
转换为表达式,并计算x的值。如果有人能告诉我如何做到这一点,那将会有很大帮助。我目前正在使用多个提示,让用户在x
之前输入等式,然后在x
之后输入等式,然后在两者之间插入变量,并计算它的值。
编辑:
我没有预定义的变量,它必须适用于x > 1000
或x != //an integer
的方程式。
提前致谢!
答案 0 :(得分:1)
似乎是一个复杂的问题...
这是一个简单轻松的问题解决方案。希望你能使用它的一些组成部分。
约束:
var input = prompt("enter the equation"); //eg: x*x+x+1=241
var parts = input.split('=');
//solving equation starts
var x = 0;
var temp = eval(parts[0]);
while (temp != parts[1] && x<1000){
x++;
temp = eval(parts[0]);
}
var ans = (x<1000)?"answer is "+x:"this program cannot solve this";
//solving equation finishes
alert(ans);
&#13;
您可以替换&#34;求解等式&#34;部分用计算机科学中用于求解方程的一些数值方法(更多细节here)。如果要允许用户使用您的语法,则必须解析等式的左侧并将它们映射到正确的javascript表达式(作为用eval()
执行的字符串)。
答案 1 :(得分:0)
Javascript可以使用eval函数来评估字符串,但是变量将被预先定义,并且方程必须以javascript可以理解的方式进行格式化:
var x = 15
var string = "15*x*17/x"
eval(string)
您的示例:"15*x(5^4-56)*17/x=15"
不会运行,因为它会将x(5^4-56)
评估为javascript表达式,这是无效的。
答案 2 :(得分:0)
使用我发现的所有信息和其他方法,我总结了一个共同的答案。邀请任何人更改和/或添加他们的方法。
为了尽可能少地为用户和编码器执行此操作,您将实现以下代码。
var input = prompt("enter the equation"); //eg: x*x+x+1=241
var parts = input.split('=');
//solving equation starts
var x = 0; //Or the lowest possible value of "x"
var temp = eval(parts[0]);
while (temp != parts[1] && x<1000){ // && x < The highest number to evaluate
x++; //Add the increment (determines the maximum amount of digits) eg x+0.1 for tenths max, x+2 for only even integers etc.
temp = eval(parts[0]);
}
var ans = (x<1000)?"answer is "+x:"this program cannot solve this"; //make sure x< is the same as line 7.
//solving equation finishes
alert(ans);
&#13;
但是,如果您允许十分之一或大于2000的范围,则运行速度非常慢。
更快的运行方式是定义允许任何变量(而不仅仅是x)的数组和不同的平均过程,例如here.(右键单击查看html并单击第一个js源到看代码)但是,这是2k行。两者都可以使用,但第二种更有效,并且可以解决多元方程。