四则运算算法求助

来源:3-1 四则运算的实现

Win_D

2019-08-29 17:13:53

我按照自己对计算器的理解改了下代码,使得计算器可以在3+3+3=9这种情况可以计算,而不用进行3+3=6+3=9的操作,但是出现了问题。例如现在8*8/2=0.5,这算法要怎么优化?


function init() {
   var num=document.getElementById("num");
   num.value = 0;
   num.disabled="disabled";

   var oButton=document.getElementsByTagName("input");
   var btn_num1 = 0;
   var fh;
   for (var i = 0;i < oButton.length;i++){
       oButton[i].onclick = function () {
           if (isNumber(this.value)){
               // num.value = (num.value + this.value)*1;
               if (isNull(num.value)) {
                   num.value = this.value;
               }else {
                   num.value = (num.value + this.value)*1;
               }
           } else {
               var btn_num = this.value;
               // var btn_num1 = 0;
               switch (btn_num) {
                   case "+":
                       btn_num1 = parseInt(num.value) + btn_num1;
                       num.value = 0;
                       fh = "+";
                       break;
                   case "-":
                        btn_num1 = parseInt(num.value) - btn_num1;
                       num.value = 0;
                       fh = "-";
                        break;
                   case "*":
                       if (btn_num1 == 0) {
                           btn_num1 = parseInt(num.value)
                       }else {
                           btn_num1 = btn_num1*parseInt(num.value);
                       }
                       num.value = 0;
                       fh = "*";
                       break;
                   case "/":
                       if (num.value == 0) {
                           alert("除数不能为0");
                           num.value =0;
                       }else {
                           if (btn_num1 == 0) {
                               btn_num1 = parseInt(num.value)
                           }else {
                               btn_num1 = btn_num1/parseInt(num.value);
                       }
                       }

                       num.value = 0;
                       fh = "/";
                       break;
                   case "=":
                       switch (fh) {
                           case "+":
                               num.value=btn_num1+parseInt(num.value);
                               break;
                           case "-":
                               num.value=btn_num1-parseInt(num.value);
                               break;
                           case "*":
                               num.value=btn_num1*parseInt(num.value);
                               break;
                           case "/":
                               num.value=btn_num1/parseInt(num.value);
                               break;

                       }

                       break;
                   case ".":
                       alert("111");
                       break;
                   case "←":
                       alert("111");
                       break;
                   case "+/-":
                       alert("111");
                       break;
                   case "C":
                       num.value = 0;
                       btn_num1 = 0;
                       break;
                   case "m":
                       alert("111");
                       break;
               }
               // alert()
           }
       }
   }

}

// 验证文本框是否为空或者0 * /
function isNull(n) {
   return n === "0" || n.length === 0;
}

// 判断字符串是不是数字
function isNumber(n) {
   return !isNaN(n);
}

写回答

1回答

余生______

2019-08-29

你可以参考https://www.jb51.net/article/124685.htm  这个博客里的方法写一下

0
hin_D
h 这个和老师讲的思路是一样的
h019-08-30
共1条回复

0 学习 · 3562 问题

查看课程