2017-10-12 8 views
0

私の電卓は、一度に2つの数字でしか操作できません。 =を押す前に、異なる演算子で2つ以上の数値を連結する方法がわかりません。誰もそれを行う方法のヒントを与えることができますか? (以下の私のjavascriptのコードがある)基本的な電卓で連鎖していますか?

リンクcodepen:https://codepen.io/cmtran/pen/LzmbLM?editors=1111

 $(document).ready(function(){ 
    var testNumLength = function(number) { 
     if (number.length > 9) { 
      totaldiv.text(number.substr(number.length-9,9)); 
      if (number.length > 15) { 
       number = ""; 
       totaldiv.text("Err"); 
      } 
     } 
    }; 
     var entry = ""; 
    var current = ""; //after operator is entered 
    var operator = ""; 
    var res = ""; 
    var totaldiv = $("#total"); 
    totaldiv.text("0"); 

    $("#numbers a").not("#clear,#clearall").click(function(){ 
    entry += $(this).text();//take the text of the numbers when clicked and append it to var entry 
    //display input1 on screen 
    totaldiv.html(entry); 
    testNumLength(entry); 
    }) 

    $("#clear,#clearall").click(function(){ 
    entry = ""; 
    if ($(this).attr("id") === "clearall"){ 
     current = ""; 
    } 
    totaldiv.text("0"); 

    }) 

    $("#operators a").click(function(){ 
    //append operators to var operator 
    operator = $(this).text(); 

     current = entry; 
     entry = ""; 



    }) 

    $("#decimal").click(function(){ 
     //var numOfDecs = 0; 
     for (var i=0;i<entry.length;i++){ 

      if (entry.indexOf(".")== -1){ 
       entry += "."; 
       // numOfDecs += 1; 
       } 
     } 
     totaldiv.text(entry); 
     testNumLength(entry); 
    }) 

    $("#equals").click(function(){ 
    var result = eval(current + operator + entry); 
    entry = result; 

    totaldiv.html(result.toFixed(2)); 


    }) 

}) 

答えて

0

をあなたは自分のフィールドとして、オペレータと2つの番号を保存するよりも、よりダイナミックなデータ構造をサポートするために必要となるものを連鎖開始します。

あなたは(操作の順序を無視して)を計算するためにそれらを介して、ループ

を順番に提出されたすべての数字とオペランドを含む単一の項目配列を持つことができ、そのような配列は、サンプル・データを以下のようになります。

[50, 'times', 25, 'plus', 10] 

次にループして、最初の操作(要素0,1,2:50x25)の答えを決定し、次にその答え+ 10などを決定することができます。

関連する問題