将“eval”除以零的结果强制为零

时间:2015-08-08 16:35:00

标签: javascript math

我有一个要求,我需要以这样的方式管理javascript'eval',如果任何计算的结果是无穷大,我希望它将其变为0。

var x = 10
var y = 20
var a = eval(x * y / 0 + 5)

对于上面的计算,理想情况下结果应该是无穷大+ 5即无穷大但我想要无穷大+ 5应该是0 + 5 = 5.

我知道0/0不是无穷大,但这只是一个要求

3 个答案:

答案 0 :(得分:1)

根据我的理解,在任何时候表达式都变为无穷大,将其设置为0并继续评估?



function EVAL(exp) {
  exp.replace(/ /, ''); // Remove whitespace
  exps = exp.split(/(?=[+\-*/])/); // Split by operators
  var result = exps[0];
  for (var x = 1; x < exps.length; x++) {
    result = eval(result + exps[x]);
    if (!isFinite(result)) result = 0;
  }
  return result;
}

alert(EVAL("10+3/0+5"));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

  

对于上述计算,理想情况下结果应为无穷大+ 5

Infinity + 5 Infinity。在控制台中尝试Infinity + 5

  

...应该是0 + 5 = 5 ......

我不知道你在那里试图说什么,但表达式的评估方式是这样的:

((x * y) / 0) + 5

0 + 5你没有任何意义,当其他操作完成时,添加就会发生。

注意:您根本不需要或只需要eval。简单地:

var x = 10;
var y = 20;
var a = x * y / 0 + 5;

答案 2 :(得分:0)

我不清楚你的要求。要将无穷大变为零,请使用'if statements' 试试这段代码:

var x = 10;
var y = 20;
var a = x * y;
//checks if a is zero or not 
if(a==0)
{
//if a is zero assign value of c is equal to 5 to avoid infinity problem 
c=5;
}
else
{
c=b/0+5;
}