2016-04-25 5 views
0

私は計算機を使用しており、divをゼロにしないようにしたいと考えています。彼らが "/ 0"の場合、最後に要素をチェックしなければならないと思いますか?私は間違っているの?代わり最後の2つの要素を確認する

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'(最後のスペース)ではなく、何か間違ったことはしません。しかし、私はそれにどのようにアプローチするのではありません。私は方程式を解析するだろう - おそらくあなたはとにかくする必要がありますか? - そして* then *除数が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
  • など

as T.J. Crowder氏は、これはおそらくフォーマットが一貫していないためだとコメントしています。

0

代わりに対してそれをに行くのJavaScriptエンジンでを作業する方が良いだろう。

入力された数式を評価し、Javascriptエンジンによってスローされた例外を処理するだけです。

評価コードをtry ... catch(e)ブロック内に置き、そこで例外を処理します。 Javascriptのエラー処理の

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

さらに詳しい情報:http://javascript.info/tutorial/exceptions

更新

は、残念ながら、ゼロによる除算はJavascriptにスローされる例外が発生しない、ということを忘れていました。 0/0の場合はNaNx/0の場合はInfinityxは任意の数字)になります。 Infinityのタイプはnumberです。

あなたの方程式を評価した後、これをテストできます。

+0

これは、文字列を2つの値に解析して除算であることが分かっている場合にのみ機能し、 'value2 == 0' 。 try ... catchは未知の/予期しないものを含むすべてのエラーをキャッチします(遅い)。 – lerouche

+0

アイデアは、すべてのエラーをキャッチして1つずつ処理することです。さまざまなエラーに対して異なる処理方法を書くことができます。これは、ループで多くのものを実行する必要はありませんので、パフォーマンスはショーストッパーではありませんシンプルな電卓です。 – beerwin

+0

JavaScriptでゼロで除算することは例外ではありません。 – lerouche

0

私の以前の回答は、あなたの問題に対する1つの解決策ですが、達成したいことはあまりにも複雑かもしれません。

入力文字から文字を取り出す代わりに、文字列を演算子に分割して部分をトリムします。私は2つのオペランドの解を作成します。

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

入力を検証してフィルタリングする必要があります(番号や有効な演算子以外のものは許可しないでください)。また、操作の優先度を確認する必要があります(方程式に複数の演算子を許可していますか?)

関連する問題