2016-04-25 81 views
0

我正在做我的計算器,並希望防止div爲零。我想我必須檢查最後元素,如果他們是「/ 0」?我做錯了什麼?檢查兩個最後的元素

function div(input) 
    { 
     var input = document.getElementById("t"); 
     var lastElement = (input.value.length-1); 

     //alert(input.value[lastElement-1]); 
     //alert(input.value[lastElement]); 


     if (input.value[lastElement-1] === "/") 
      { 
       if (input.value[lastElement] === "0") 
       { 
       alert("/to Zero"); 
       } 
      } 
    } 
+3

請添加一些更多的信息,如HTML標記,其餘的JS代碼等 –

+1

假設你的字符串真的以'/0'而不是'/ 0'或'/ 0'或'/ 0'(最後的空格),你沒有做錯任何事情(儘管你有其他的選擇)。但這不是我如何處理它。我會解析這個等式 - 大概你會需要嗎? - 然後*然後*檢查除數是否爲0. –

回答

0

使用表達式來代替:

var is_div_by_zero = /\/[\s.0]+$/.test(value); // Returns true if it is divided by zero, false if otherwise 

它匹配:

  • /0
  • /0
  • /0
  • /000
  • /0.0 0000

由於T.J. Crowder評論說這可能是由於格式不一致造成的。

0

這會更好的工作 JavaScript引擎而不是去它。

只需評估輸入的公式並處理由JavaScript引擎拋出的異常。

將您的評估代碼放在try ... catch(e)塊中,並處理那裏的異常。

try { 
    // your calculation code here, eg: 
    result = value1/value2; 
} catch (e) { 
    // this catches the error and provides the proper way of handling the errors, 
    // and your script doesn't die because of the error 
    // also, the e parameter contains the exception thrown, which provides info you can 
    // display 
    // or based on the error type come up with a proper solution 
    alert (e.message); 
} 

於JavaScript錯誤處理的更多信息:http://javascript.info/tutorial/exceptions

更新

忘記了,不幸的是,一個被零除不導致異常的Javascript被拋出。它將導致NaN爲0/0和Infinityx/0(其中x是任何數字)。 Infinity的類型爲number

您可以在評估您的公式後對此進行測試。

+0

這隻有在他/她將字符串解析爲兩個值並確定它是除法時才起作用,此時可以檢查'value2 == 0' 。 Try ... catch會捕獲所有錯誤,包括未知/意外錯誤(並且速度較慢)。 – lerouche

+0

這個想法是,抓住所有的錯誤,並逐個處理它們。你總是可以針對不同的錯誤編寫不同的處理方法。這是一個簡單的計算器,它不必在循環中執行很多東西,所以性能不是在這裏展示的。 – beerwin

+0

在JavaScript中劃分零不是一個例外。 – lerouche

0

我以前的答案是解決您的問題的方法之一,但可能會太複雜,無法達成目標。

而不是從您的輸入字符逐字符,將您的字符串拆分在操作員和修剪零件。我將爲兩個操作數創建解決方案,並且可以從此開始。

var equation = document.getElementById("t").value; 
var operands = equation.split('/'); 
var divisor = operands[operands.length - 1].trim(); 

// since the contents of your input are a string, the resulting element is also a string 
if (parseFloat(divisor) == 0) { 
    alert("Division by zero"); 
} 

這是一個非常粗略的方法,因爲你將不得不驗證和過濾你的輸入(沒有其他事情比數和有效的運營商應該被允許)。同樣,你將不得不檢查操作優先級(你允許多個操作符在你的等式中嗎?)等