繁体   English   中英

JavaScript数学函数解析器

[英]Javascript math function resolver

我正在尝试创建一个函数,在该函数中您将以HTML形式输入变量,并且它将计算所有Y点,但是由于某些原因,此行代码不起作用: m * ( x * x ) + c * x + p = points; 我不知道我的语法错误还是什么? 完整代码在这里:

var m = document.getElementById("m").value;
var c = document.getElementById("c").value;
var p = document.getElementById("p").value;
var x = -10;
var points;
var y = -10;
var functionPoints = points[0];
function functionResolver(m, c, p) {
        while ( x > -11 && x < 11 ) {
         m * ( x * x ) + c * x + p = points;
         points[y] = points;
         y += 1;
         x += 1;
       };
     };

document.getElementById("m").value是一个string

var m = Number(document.getElementById("m").value);

您需要进行右侧分配:

 points[y] = m * ( x * x ) + c * x + p;

该程序将按照PEMA的顺序进行操作。 您可以在计算周围放置额外的括号,也可以将计算分解为较小的部分。

•括号•指数•乘法/除法(从左到右)•加法/减法(从左到右)。

例如

(m *(x * x))+ c * x + p =点;

将与

m *(x * x)+(c * x)+ p =点;

这将不同于

** m *(x * x)+(c *(x + p))=点;

此外,这些部分可能不是数字,因此请使用Number()转换为数字

正如提到的其他答案一样,您必须将输入从字符串转换为数字。 另外,请始终注意将变量名放在表达式的左侧(您的位置在右侧),并且不要用计算结果覆盖点数组变量(在while循环上方声明)。 在这里,我声明了一个局部变量来存储单个计算结果。 有几种方法可以将输入转换为字符串:

使用parseFloat(如果要支持十进制输入):

var point = parseFloat(m * ( x * x ) + c * x + p);
points[y] = point;

使用parseInt:

var point = parseInt(m * ( x * x ) + c * x + p);
points[y] = point;

使用Number(与parseInt基本相同,请参阅parseInt()和Number()有什么区别? ):

var point = Number(m * ( x * x ) + c * x + p);
points[y] = point;

在下面的示例中,我们通过将两行压缩为一条来消除对本地声明的点变量的需要(您当然可以使用以上3种字符串到数字方法中的任何一种):

points[y] = parseFloat(m * ( x * x ) + c * x + p);

我不确定这里的points [y]是什么意思……因为y初始化为-10,而points [-10]则基本上意味着您正在尝试访问点的索引“ -10”。

为了阐明其他答案,除了右手分配无效和将输入转换为数值的问题外,还需要等待DOM加载并让用户有时间在输入字段中键入值。 您当前的代码尝试立即加载值,而不是等待(例如)单击一个按钮。

有关如何实现此功能的完整示例,请参见本要点

let elM, elC, elP, elR, points;
let min = -10;
let max = 10;
document.addEventListener("DOMContentLoaded",function(){
  elM = document.getElementById("m");
  elC = document.getElementById("c");
  elP = document.getElementById("p");
  elR = document.getElementById("result");
  document.getElementById("run").addEventListener("click",calculate);
});

function functionResolver(m, c, p) {
  let points = [];
  for(let x=min; x<=max; x++) {
    points.push( [x,m * ( x * x ) + c * x + p] )
  }
  return points;
}
function calculate() {
  points = functionResolver(+elM.value,+elC.value,+elP.value);
  //wipe result table, creating col headings
  elR.innerHTML = "<tr><th>x</th><th>y</th></tr>"; 
  points.forEach( coord => {
    elR.innerHTML += `<tr><td>${coord[0]}</td><td>${coord[1]}</td></tr>\n`;
  });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM