javascript - 有没有办法通过用户提示输入来解决数学问题

标签 javascript html

我想要(例如我的提示是输入计算)如果用户输入2+2 文档.write(sum); 应该在我的空白页面上显示 4。我知道如何通过两个提示轻松完成此操作,但我正在尝试制作一种计算器。我已经在谷歌或数学方式上看到了这一点,你可以输入长串的数字和运算符,然后它会给你步骤,最后给出答案。 我需要一种方法来检索第一项,然后是第二项,然后是第三项,然后将它们存储在变量中。如果我最终能做到 22+22 那样那就太好了,但不确定这会如何运作。 userInput.includes("+") 可能已经足够好了,因为他们没有其他时间了。

//if (userInput.includes(allNumbers && "+")){
     // value1 = userInput.split("").map(parseInt).filter(i =>!isNaN(i))[0]
        //value2 = parseint(userInput);
       // sum = value1 + value1;

        //document.write(sum);

   //}

我已经尝试过了,但是当我输入 2+2 时什么也没有发生。我尝试在互联网上查找,但我看到的只是所有字符串输入或 1 个数字,然后是第二个数字的第二个提示。

我期望当用户为 document.write 输入 2+2 时显示 4。 然后我最终想要进行减法、除法和乘法。但目前 2+2 没有任何作用

最佳答案

更好的方法是将计算分成几个部分并遵循 BEDMAS 规则:

  1. B:首先提取并处理括号中的项目。继续向下进入嵌套括号,直到没有更多为止。
  2. E:接下来处理带有指数的项。
  3. D:依次处理除号两侧的所有项目。
  4. M:依次处理乘号两侧的所有项目。
  5. A:依次处理加法符号两侧的所有项目。
  6. S:依次处理减法符号两侧的所有项目。
  7. 如果在嵌套括号内,则上一层并继续执行步骤 2。将嵌套括号替换为该括号内的计算结果。
  8. 不断循环地重复括号“树”,直到完成。

这是基本计算器的非常一般的概述,只需将所有项目展平,直到获得最终值(当然假设没有变量;))。

这是一种入门方法:

var mathParts = "1 + 2 - ((3 + (2 * 3/3)) * 5^2)/6".match(/[0-9()^/*+-]/g) ;

数学部分:(23) [“1”、“+”、“2”、“-”、“(”、“(”、“3”、“+”、“(”、“2”、“", "3", "/", "3", ")", ")", "", "5", "^", "2", ")", "/”,“6”]

现在您所要做的就是迭代数组 (mathParts),并在每次点击 ( 时增加嵌套级别,并在每次点击 )。之后使用多次传递:第一次传递(或循环)处理指数 (^),然后在下一次传递中使用 /,然后在接下来,然后是 +,然后是 -

如果您只运行此客户端,并删除所有非数学字符(不允许 $_AtoZ[])并仅允许数学所需的符号,那么它也应该足够安全,只需使用 eval() 进行计算。如果使用正确,那么它是安全的,并且只能由客户端网页的用户使用,因为这些用户已经可以按 F12 并根据需要破解该网站;因此,在这种情况下,防止评估是没有意义的。我建议您是否采用该路线在 new Function("eval()") 范围内运行 eval() ,以便它在全局级别运行,而不是在您自己的代码范围(以保持私密性)。

关于javascript - 有没有办法通过用户提示输入来解决数学问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58210531/

相关文章:

javascript - 在javascript/jquery中获取当前视频帧

JavaScript 计算器总是四舍五入到下限

jquery - 文本的位置相对和绝对高度问题

html - 在移动网络上禁用双指缩放

asp.net - 在 Javascript 中从对象数组创建 HTML 表

javascript - 使用 jquery 淡入淡出

javascript - 为什么 Quill 会过滤它的内容?

javascript - 使用 javascript 在 css 网格布局中突出显示元素

php - 如何从数据库中获取包含类别的随机问题?

javascript - 打印(在纸上)表单中 html 文本框的值