2017-06-27 3 views
0

電卓リンク:http://357682.cmd16a.cmi.hanze.nl/rekenmachine/calc.htmlNaNのエラーと非作業substract

私はHTML、CSSやJSを使用して電卓を構築しようとしていますが、私はそれが正常に動作させることはできません。 2つ(実際には3つ)のものが間違っています。

最初は減算です。私が '4-2'と入力すると、2の代わりに '6'が結果として得られます。理由は分かりません。それ以外に、私が '4 * 2'や '4/2'(掛け算と除算)をするとNaNが出力されます。私は自分のコードで何がうまくいかないのか分かりません。

$(document).ready(function() { 
 

 
    var display = ""; 
 
    var clear = 0; 
 
    var invoer = 0; 
 
    var mgetal = null; 
 
    scherm(clear); 
 

 
    $(".memory").on("click", function() { 
 
    if ($(this).hasClass("mem_add")) { 
 
     mgetal = (mgetal === null) ? (+$(".calcscherm").text()) : mgetal + 
 
     (+$(".calcscherm").text()); 
 
     $(".memoryscherm").html(mgetal); 
 
    } 
 
    if ($(this).hasClass("mem_less")) { 
 
     if (mgetal !== null) { 
 
     mgetal = mgetal - (+$(".calcscherm").text()); 
 
     $(".memoryscherm").html(mgetal); 
 
     } else { 
 
     $(".calcscherm").empty(); 
 
     $(".calcscherm").append("Geheugen is nog leeg"); 
 
     } 
 
    } 
 
    if ($(this).hasClass("mem_show")) { 
 
     if (mgetal !== null) { 
 
     $(".calcscherm").html(mgetal); 
 
     display = mgetal; 
 
     } else { 
 
     $(".calcscherm").empty(); 
 
     $(".calcscherm").append("Geheugen is nog leeg"); 
 
     } 
 
    } 
 
    if ($(this).hasClass("mem_clear")) { 
 
     if (mgetal !== null) { 
 
     mgetal = 0; 
 
     $(".memoryscherm").html("Geheugen is leeggehaald"); 
 
     } else { 
 
     $(".calcscherm").empty(); 
 
     $(".calcscherm").append("Geheugen is nog leeg"); 
 
     } 
 
    } 
 
    }); 
 

 
    $(".buttons span").on("click", function() { 
 
    var drukKnop = $(this).html(); 
 

 
    if (drukKnop === "+/-") { 
 
     display *= -1; 
 
    } else if (drukKnop === ".") { 
 
     display += "."; 
 
    } else if (nummer(drukKnop)) { 
 
     if (display === "0") display = drukKnop; 
 
     else display = display + drukKnop; 
 
    } else if (operator(drukKnop)) { 
 
     invoer = parseFloat(display); 
 
     reken = drukKnop; 
 
     display = reken; 
 
    } else if (drukKnop === "=") { 
 
     display = uitvoer(invoer, display, reken); 
 
     reken = null; 
 
    } 
 
    console.log(drukKnop); 
 
    scherm(display); 
 
    }); 
 

 
    $(".clear").on("click", function() { 
 
    $(".calcscherm").text("0"); 
 
    display = ""; 
 
    clear = 0; 
 
    }); 
 

 
    operator = function(value) { 
 
    if (value === "+") return value; 
 
    if (value === "-") return value; 
 
    if (value === "*") return value; 
 
    if (value === "/") return value; 
 
    }; 
 

 
    nummer = function(value) { 
 
    return !isNaN(value); 
 
    } 
 

 
    uitvoer = function(a, b, reken) { 
 
    a = parseFloat(a); 
 
    b = parseFloat(b); 
 
    console.log(a, b, reken); 
 
    if (reken === "+") return a + b; 
 
    if (reken === "-") return a - b; 
 
    if (reken === "*") return a * b; 
 
    if (reken === "/") return a/b; 
 
    } 
 

 
}); 
 

 
scherm = function(schermtekst) { 
 
    var schermtekst = schermtekst.toString(); 
 
    $(".calcscherm").html(schermtekst); 
 
};
<script language="javascript" type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"> 
 
</script> 
 

 
<div id="calculator"> 
 
    <div class="container"> 
 
    <div class="memoryscherm"></div> 
 
    <div class="buttons" style="margin:0; margin-top: 10px;"> 
 
     <div class="row"> 
 
     <span class="memory mem_clear">MC</span> 
 
     <span class="memory mem_show">MR</span> 
 
     <span class="memory mem_add">M+</span> 
 
     <span class="memory mem_less memory-end">M-</span> 
 
     </div> 
 
    </div> 
 
    <div class="calcscherm"></div> 
 
    </div> 
 
    <div class="buttons"> 
 
    <div class="row"> 
 
     <span class="operator">+</span> 
 
     <span class="operator">-</span> 
 
     <span class="operator">/</span> 
 
     <span class="operator end">*</span> 
 
    </div> 
 
    <div class="row"> 
 
     <span class="number">7</span> 
 
     <span class="number">8</span> 
 
     <span class="number">9</span> 
 
     <span class="eval end">=</span> 
 
    </div> 
 
    <div class="row"> 
 
     <span class="number">4</span> 
 
     <span class="number">5</span> 
 
     <span class="number">6</span> 
 
     <span class="number">1</span> 
 
    </div> 
 
    <div class="row"> 
 
     <span class="number">2</span> 
 
     <span class="number">3</span> 
 
     <span class="number">.</span> 
 
     <span class="number">0</span> 
 
     <span class="clear">C</span> 
 
    </div> 
 
    </div> 
 
</div>

答えて

0

あなたはそれを保存opperatorを取得し、画面に表示された場合。そして、あなたが次の番号を取得するとき、あなたはopperatorを削除していないし、まだ数学を行うために画面上の "文字列"を使用します。

だから、 "4 - 2"、 "4 - -2" になり...あなたはparseFloatは操作を行うため、6

に等しい "* * 4 3" はNaNです。

数を処理するために、あなたのコードは私のためにそれを固定

} else if (nummer(drukKnop)) { 
    if (display === "0") display = drukKnop; 
    else if (nummer(display)) display = display + drukKnop; 
    else display = drukKnop; 
} 
+0

恐ろしい男、のようなものでなければなりません。それは今どのように動作するのですか?ありがとう! –

関連する問題