2015-08-08 3 views
-2

У меня есть требование, где нужно управлять JavaScript«Eval»таким образом, что, если результат любого вычисления является бесконечность, я хочу, чтобы превратить это 0.принуждать результат `eval` деления на ноль в ноль

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

Для расчета выше в идеале результат должен быть бесконечность + 5, что есть бесконечность, но я хочу бесконечность + 5 должен быть 0 + 5 = 5.

Я знаю, что 0/0 не бесконечности, но это просто требование

+1

Так, когда следует деление на ноль, равной нулю? Что вы пытаетесь достичь? – J0e3gan

+1

0 делить на 0 не определено в математике, а не бесконечно не ноль – Balder

ответ

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; 
+0

Его требование моего клиента просто заменить результат бесконечности на 0. как в приведенном выше вычислении 10 * 20/0 = бесконечность и бесконечность + 5 = бесконечность. если вы оцените выше код с функцией javascript eval, он просто даст результат как бесконечность. Я хочу получить результат как бесконечность + 5 = 0 + 5 = 5 – user3133994

+0

@ user3133994: Если ваш клиент хочет, чтобы вы заменили 'Infinity' на' 0', вам придется сделать это явно. (Например: if (! IsFinite (result)) {result = 0;} result + = 5; ') Это полностью противоречит всем стандартным правилам математики. –

+0

Ты не понимаешь. Я не говорю об общей оценке, я спрашиваю о ее части. Может быть, вы интерпретируете это неправильно Т. Я. Кроудера. И я знаю его неправильную математику, но все же мы хотим, чтобы – user3133994

0

Непонятно о ваших требованиях. Чтобы включить бесконечность в нулевое использование «если заявления» Попробуйте этот код:

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; 
} 
+0

Я не хочу проверять весь результат, я просто хочу Если какой-либо расчет в пределах оценки вызывает бесконечность, я хочу, чтобы она была равна 0. пожалуйста, см. пример, который я дал – user3133994

+0

, вам нужно написать пользовательскую функцию, которая заменяет «eval», чтобы решить эту проблему. –

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"));

+0

предположим, что var tmp = eval (x * y/0 + 5), в этом случае он станет бесконечным, если согласно моему требованию оно должно быть 5. оно имеет 3 оценки, которые x * y, (X * y)/0 и (x * y/0) +5. – user3133994

+0

спасибо, Гарри, у меня вопрос правильный. – user3133994

+0

@ user3133994 Приветствую вас, это был необычный запрос, но я рад, что смог помочь! Пожалуйста, отметьте правильный ответ, если ваш вопрос будет разрешен. – Gary

Смежные вопросы