【问题标题】:javascript calculator: plus sign alternativesjavascript计算器:加号替代品
【发布时间】:2013-02-21 05:07:04
【问题描述】:

当我正在研究我当前的问题时,article 似乎很有希望,但我无法自己弄清楚这是否是我问题的答案。因此,如果有人可以帮助我,那就太好了。

这是我的功能:

function CalculateIMSUB(form) {
  var Atext = form.input_1.value;
  var Btext = form.input_2.value;
  var val = form.val.value;
  var A = eval(Atext);
  var B = eval(Btext);
  if (isNaN(A)) A = 0;
  if (isNaN(B)) B = 0;
  var answer = A - B;
  form.Answer.value = answer;
}

这是我的html:

<form>
  <INPUT TYPE=TEXT name="input_1" SIZE=15>
  <INPUT TYPE=TEXT name="input_2" SIZE=10>
  <INPUT TYPE="button" VALUE="+" name="SubtractButton"
  onclick="CalculateIMSUB(this.form)">
  <INPUT TYPE=TEXT NAME="Answer" SIZE=12>
  <input type="hidden" name="val" value="" />
</form>

我的问题:

我可以用“/”添加吗

例如,目前,如果您在输入 1 文本字段中输入 10 / 5 并单击计算,您将在答案文本字段中得到 2 的答案。因为我们都知道 10 除以 5 等于 2。我希望能够在输入 1 文本字段中输入 10/5 并收到 15 的答案,这相当于 10+5。非常感谢您的帮助,谢谢,这是我的jsFiddle

【问题讨论】:

  • 为什么要用除法来表示加法?
  • 当你减去数字时为什么会有加号?...不确定是否要重载运算符,但你可以用正则表达式做你想做的事
  • @Blender 我想这样做的原因是这是我工作中的库存。当我们使用笔和纸时,我们使用分隔符号来表示不同的位置。
  • @groovy,加号在那里,因为在我的函数中。您将 input1 (5+5+5) 字段中的所有内容相加,然后从 input 2 (2+2+2) 字段中减去所有内容。这将得出我在括号中提供的数字的结果为 15-6,即 9

标签: javascript calculator


【解决方案1】:

这是一个非常简单的计算器实现,带有原型和模块,不需要eval

var calc = (function calcModule() {
  function Calculator(operation) {
    this.op = operation;
    this._init();
  }

  Calculator.prototype = {
    _init: function() {
      this.n1 = +this.op.split(/\D/)[0];
      this.n2 = +this.op.split(/\D/)[1];
      this.result = this[this.op.match(/\D/)[0]]();
    },
    '+': function() { return this.n1 + this.n2 },
    '-': function() { return this.n1 - this.n2 },
    '*': function() { return this.n1 * this.n2 },
    '/': function() { return this.n1 / this.n2 }
  };

  return function(op) {
    return new Calculator(op);
  };
}());

您可以根据需要更改符号的作用。你可以这样使用它:

console.log(calc('20-15').result); //=> 5
console.log(calc('15/5').result); //=> 3
...

请注意,它非常简单,它只适用于两个数字,但只是为了让您了解...

【讨论】:

  • 感谢您的回答。但我想这对我的website 来说是不切实际的。
  • eval 将更加不切实际。用户可以在任何这些输入中输入恶意代码...我的示例非常简单,但通过一些工作您可以使用多个数字,而且这更便携。
  • @Clint:想在一秒钟内让您的应用崩溃吗?在任何正在评估的输入中输入while(true),然后单击“主计算”。巴安!这就是为什么 eval 不应该用于此的原因。
  • 你提出了一个很好的观点。我提供的网站是我使用平板电脑输入工作场所库存的网站。我以网站为例,我将很快限制对网页的访问,以便只有我可以查看和/或提交表单。我无论如何都不是专业人士,所以我问你,如果我是唯一一个提交数据的人,我是否只使用它来实施你的策略是一件明智的事情。我说的不切实际就是这个意思
【解决方案2】:

你也可以这样做:

var Atext = form.first.value.replace(/\//g,"+");
var Btext = form.second.value.replace(/\//g,"+");

这将在幕后替换所有除法运算符,以便您的 eval 将它们作为加法处理。 (所以你可以放 5/5/5 得到 15,或者你有什么。)

【讨论】:

  • groovy,我相信你刚刚成为我的新宠。谢谢
猜你喜欢
  • 2016-04-02
  • 2012-04-08
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多