我想要(例如我的提示是输入计算)如果用户输入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 规则:
- B:首先提取并处理括号中的项目。继续向下进入嵌套括号,直到没有更多为止。
- E:接下来处理带有指数的项。
- D:依次处理除号两侧的所有项目。
- M:依次处理乘号两侧的所有项目。
- A:依次处理加法符号两侧的所有项目。
- S:依次处理减法符号两侧的所有项目。
- 如果在嵌套括号内,则上一层并继续执行步骤 2。将嵌套括号替换为该括号内的计算结果。
- 不断循环地重复括号“树”,直到完成。
这是基本计算器的非常一般的概述,只需将所有项目展平,直到获得最终值(当然假设没有变量;))。
这是一种入门方法:
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/