OnlineCalculator错误检查

时间:2015-10-24 00:18:35

标签: javascript

我已经制作了在线计算器程序,但遇到了一些错误检查问题。这就是我想让我的程序检查的内容: 1.连续添加两个运营商。 2.除了负数之外,方程式不应该从运算符开始。 3.数字中不应超过一位小数。

非常感谢任何完成此任务的帮助。

这是我的代码的JavaScript部分。如果有人需要我的HTML部分,请问。我认为现在不重要。

<script type="text/javascript">
   // Addings operators
   var operatorEl = document.getElementsByClassName('operator');
   // Adding btnElements
   var btnElements = document.getElementsByClassName('addme');
   //var to store user input and button input
   var inputVal = '';
   var buttonVal = '';
   var display = document.getElementById('display');
   var errorMsg = document.getElementById('error-msg');

   function clearContent(){
    display.value = '';
    inputVal = '';
    buttonVal = '';
    errorMsg.innerHTML = '';
   }

    operatorEl[0].onclick = clearContent;

   function backBtn() {
    var dvLength = buttonVal.length;
    buttonVal = buttonVal.substring(0,dvLength - 1);
    display.value = buttonVal;
   }

   operatorEl[1].onclick = backBtn;

   function calcCos(){
    inputVal = display.value;
    var newVal = Math.cos(inputVal);
    display.value = newVal;
   }

   operatorEl[2].onclick = calcCos;

   function calcSin() {
    inputVal = display.value;
    var newVal = Math.sin(inputVal);
    display.value = newVal;
   }

   operatorEl[3].onclick = calcSin;

   function calcSqrt(){
    inputVal = display.value;
    if(inputVal < 0){
        errorMsg.innerHTML = 'Cannot calculate the square root of a negative number.';
        display.value = '';
        //return false;
    }

    var newVal = Math.sqrt(inputVal);
    display.value = newVal;
   }

   operatorEl[4].onclick = calcSqrt;

   function calcLog(){
    inputVal = display.value;
    if(inputVal < 1){
        errorMsg.innerHTML = 'Cannot calculate the log of a non-positive number.';
        display.value = '';
        //return false;
    }

    var newVal = Math.log(inputVal);
    display.value = newVal;
   }

   operatorEl[5].onclick = calcLog;

   //When clicked the button's value will be added to the buttonVal and put into display
   for(var i = 0; i < btnElements.length; i++){
    btnElements[i].onclick = function (){
        buttonVal += this.value;
        display.value = buttonVal;
    }
   }

   function evaluate(){
    var evaluatedOutput = eval(buttonVal);
    display.value = evaluatedOutput;
   }
   operatorEl[6].onclick = evaluate;
    </script>

我的假设是检查这3个条件的代码将在这里的某处:

//When clicked the button's value will be added to the buttonVal and put into display
   for(var i = 0; i < btnElements.length; i++){
    btnElements[i].onclick = function (){
        buttonVal += this.value;
        display.value = buttonVal;
    }
   }

虽然如何在我的程序中实际表达这一点让我感到惊讶。在此先感谢大家。

1 个答案:

答案 0 :(得分:0)

你应该使用标志来达到这个目的,这是最简单的方法。

  • 使用一个在输入第一个字符后设置为false的标志,并在等号后再设置为true。

  • 在输入一个运算符后使用一个设置为false的标志,如果下一个字符不是运算符,则再次设置为true。问题:23 + -3

  • 使用您为第一个小数点设置为false的一个标志,并在最后一个数字(运算符或等号)后再次设置为true

这一切都非常接近proper parser更好的想法。 将在您开始实施括号时通过该点。