2015-08-08 104 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 + 5Infinity。在控制檯中試試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:如果您的客戶希望您用'0'代替'Infinity',則必須明確地執行此操作。 (例如:'if(!isFinite(result)){result = 0;} result + = 5;')這與數學的所有標準規則完全相反。 –

+0

你沒有明白我的觀點。我不是在說整個評估,而是在詢問其中的一部分。也許你正在解釋錯誤的T. J. Crowder。我知道它的錯誤數學,但我們仍然希望 – user3133994

0

我不清楚你的要求。要打開無限零使用「if語句」 試試這個代碼:

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