【问题标题】:Strings into numbers and +, -, * and / - Javascript Equation calculator将字符串转换为数字和 +、-、* 和 / - Javascript 方程计算器
【发布时间】:2013-01-09 18:39:56
【问题描述】:

我正在开发“方程式计算器”,但有一些问题。我现在可以插入我的等式,但我希望它是数字,而不仅仅是数字:我希望所有的 '+' 、 '-' 、 '*' 和 '/' '做正确的事。

到目前为止,这是我的代码:


var ligning = prompt("Insert your equation here:");
var newLigning = ligning.split("=");
var sideOne = parseInt(newLigning[0],10);
var sideTwo = parseInt(newLigning[1],10);
var calculator = function() {

};
alert(sideOne);
alert(sideTwo);

这里是一个非常具体的例子:

'1 + 2 = 3' 应该提醒 3,然后再次提醒 3(因为底部有两个提醒) - 我该怎么做?

【问题讨论】:

  • 这似乎是一道作业题
  • @Patricia 如果是的话?他还想学吗?
  • 那么它应该被相应地标记:P
  • @Patricia 我同意这一点。 :-)
  • “我希望所有的 '+'、'-'、'*' 和 '/' 都是正确的东西是什么意思。 “?什么是“正确的事情”?

标签: javascript converter calculator equation


【解决方案1】:

而不是:

var sideOne = parseInt(newLigning[0],10);

你可能想要这样的东西:

var sideOne = performMath(newLining[0],10);

地点:

function performMath(equation) {
    //CODE HERE
}

performMath 可以通过几种方式完成。您需要拆分方程并获得2之间的数字和方程。这可以递归完成!

我认为这可能是一个很好的起点。

编辑

对于这个问题,如果您开始考虑操作优先级 (PEDMAS),这将是一项稍微困难的任务。方法是相同的,performMath 需要稍微复杂一些。在这种情况下,我会推荐某种数组结构用于数字,另一种用于方程式。

编辑 2

Paul S 在开始之前对字符串进行清理也是一个很好的点。您不能假设有人会输入方程式。 Rich Cook 在编程时说:

“今天的编程是软件工程师之间的竞赛 建立更大更好的防白痴程序,宇宙在尝试 生产更大更好的白痴。到目前为止,宇宙正在获胜。”

编辑 3

这个小sn-p代码应该有点帮助...无论如何这可能不是最有效的代码...

var equation = "1+22-3";
var operators = "+-*\/"

var currentNumber = "";
var numbers = new Array();
var operatorArray = new Array();
for(var i=0; i<equation.length; i++) {
  var currentChar = equation.charAt(i);
  if(operators.indexOf(currentChar) != -1) {
    operatorArray[operatorArray.length] = (currentChar);
    numbers[numbers.length] = (currentNumber);
    currentNumber = "";
  } else {
    currentNumber = currentNumber + currentChar;
    alert(currentNumber);
  }
}
numbers[numbers.length] = currentNumber;
alert("numbers : " + numbers);
alert("operators : " + operatorArray);

现在您所要做的就是遍历数组并执行正确的操作。

【讨论】:

  • 听起来不错。我现在要睡觉了,明天放学再看代码。如果我能让它工作,你当然会得到'answarmark'
  • 那么我到底应该输入什么?再说一次,我还是新手,我做不到。
  • 我不会为你编写程序,但是网上有很多算法可以帮助你。 this one 例如是相当不错的 IMO。尝试写一些东西并用你遇到的具体问题来更新你的问题。然后我们可以用更具体的信息更新答案。
  • 好吧。我的问题是如何将字符串变成数字和 4 个符号(-、+、*、/)以便我可以用它们进行计算?
【解决方案2】:

eval 真的很糟糕而且很容易被滥用,但是如果你知道你只接受数字和特定的运算符,那么你也可以对字符串进行一些清理,让它更安全一些

var ligning = prompt("Insert your equation here:"),
    newLigning = ligning.split("="),
    lhs = newLigning[0],
    rhs = newLigning[1];

function calculate(expr) {
    var s;
    expr = expr.replace(/[^\d*/()+-]/g, ''); // remove everything except permitted
    if (expr !== (s = expr.replace(/^[*/]*|[*/+-]*$/g, ''))) {
        expr = s; // don't allow * or / at the ends
        console.warn('Removing invalid operators');
    };
    return +eval(expr || 0); // + implicit converts to number
};

console.log(lhs = calculate(lhs), rhs = calculate(rhs), lhs === rhs);

【讨论】:

  • 我还是个初学者,这对我来说没有任何意义,所以我会尝试另一个,否则谢谢。
【解决方案3】:
alert ( eval(newLigning[0]) );
alert ( eval(newLigning[1]) );

【讨论】:

  • 现在 5000 人会尖叫“Eval is Evil!不要使用 Eval!”
  • Eval 是邪恶的!埃瓦尔是邪恶的! (不妨赶上潮流)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
相关资源
最近更新 更多