我有一个要求,我需要以这样的方式管理javascript'eval',如果任何计算的结果是无穷大,我希望它将其变为0。
var x = 10
var y = 20
var a = eval(x * y / 0 + 5)
对于上面的计算,理想情况下结果应该是无穷大+ 5即无穷大但我想要无穷大+ 5应该是0 + 5 = 5.
我知道0/0不是无穷大,但这只是一个要求
答案 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;
答案 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;
}