微信小程序之计算器

参考博客:

微信小程序--简易计算器_Huang_xianlong的博客-CSDN博客_微信小程序计算器

效果图:

微信小程序之计算器_第1张图片

代码:

calculator.wxml

{{result}}


  
    AC
    +/-
    %
    ÷
  

  
    7
    8
    9
    ×
  

  
    4
    5
    6
    -
  

  
    1
    2
    3
    +
  

  
    
    0
    .
    =
  

calculator.wxss

page {
  width: 100%;
  height: 100%;
  background-color: #000000;
}

.test-bg {
  position: fixed;
  bottom: 0;
}

.screen {
  position: fixed;
  color: #fbfbfb;
  font-size: 50px;
  bottom: 850rpx;
  text-align: right;
  width: 730rpx;
  word-wrap: break-word;

}

.btnGroup {
  display: flex;
  /*弹性显示结构*/
  flex-direction: row;
  /*横向显示*/
}

.item {
  width: 150rpx;
  height: 150rpx;
  line-height: 150rpx;
  border-radius: 100%;
  text-align: center;
  margin-right: 40rpx;
  margin-bottom: 10rpx;
  margin-left: 7rpx;

}

.brown {
  /* 前景色 */
  color: #fefefe;
  font-size: 60rpx;
  /* border: solid 1rpx #ffffff; */
  /* 背景色 */
  background: #efa43e;
}

.black {
  /* 前景色 */
  color: #fefefe;
  font-size: 65rpx;
  /* border: solid 1rpx #ffffff; */
  /* 背景色 */
  background: #333333;
}

.grey {
  /* 前景色 */
  color: #010101;
  font-size: 50rpx;
  /* border: solid 1rpx #ffffff; */
  /* 背景色 */
  background: #a5a5a5;
}

.item0 {
  width: 350rpx;
  line-height: 180rpx;
  border-radius: 175rpx;
  text-align: center;
  margin-right: 40rpx;
}

 calculator.js

Page({
  data: {
    C: 'C',
    addSub: 'addSub',
    add: '+',
    sub: '-',
    mut: '×',
    div: '÷',
    equ: '=',
    percent: '%',
    dot: '.',
    id0: '0',
    id1: '1',
    id2: '2',
    id3: '3',
    id4: '4',
    id5: '5',
    id6: '6',
    id7: '7',
    id8: '8',
    id9: '9',
    result: '0',
    valiBackOfArray: ['+', '-', '×', '÷', '.'],
    completeCalculate: false
  },
  // 计算结果
  calculate: function (str) {
    // 判断是不是有负数
    var isNagativeNum = false;
    if (str.charAt(0) == '-') {
      str = str.replace('-', '').replace('(', '').replace(')', '');
      isNagativeNum = true;
    }
    // 对字符串解析并运算
    var addArray = str.split('+');
    var sum = 0.0;
    for (var i = 0; i < addArray.length; i++) {
      if (addArray[i].indexOf('-') == -1) {
        if (addArray[i].indexOf('×') != -1 || addArray[i].indexOf('÷') != -1 || addArray[i].indexOf('%') != -1)
          sum += this.calculateMutDiv(addArray[i]);
        else sum += Number(addArray[i]);
      } else {
        var subArray = addArray[i].split('-');
        var subSum = 0;
        if (subArray[0].indexOf('×') != -1 || subArray[0].indexOf('÷') != -1 || subArray[0].indexOf('%') != -1) subSum = this.calculateMutDiv(subArray[0]);
        else subSum = Number(subArray[0]);
        for (var j = 1; j < subArray.length; j++) {
          if (subArray[i].indexOf('×') != -1 || subArray[i].indexOf('÷') != -1)
            subSum -= this.calculateMutDiv(subArray[j]);
          else subSum -= Number(subArray[j]);
        }
        sum += subSum;
      }
    }
    if (isNagativeNum) return (-sum).toString();
    else return sum.toString();
  },
  // 分块乘除运算
  calculateMutDiv: function (str) {
    var addArray = str.split('×');
    var sum = 1.0;
    for (var i = 0; i < addArray.length; i++) {
      if (addArray[i].indexOf('÷') == -1 && addArray[i].indexOf('%') == -1) {
        sum *= Number(addArray[i]);
      } else if (addArray[i].indexOf('%') == -1) {
        var subArray = addArray[i].split('÷');
        var subSum = Number(subArray[0]);
        for (var j = 1; j < subArray.length; j++) {
          subSum /= Number(subArray[j]);
        }
        sum *= subSum;
      } else {
        var subArray = addArray[i].split('%');
        var subSum = Number(subArray[0]);
        for (var j = 1; j < subArray.length; j++) {
          subSum %= Number(subArray[j]);
        }
        sum *= subSum;
      }
    }
    return sum;
  },
  // 是否以运算符结尾
  isOperatorEnd: function (str) {
    for (var i = 0; i < this.data.valiBackOfArray.length; i++) {
      if (str.charAt(str.length - 1) == this.data.valiBackOfArray[i]) return true;
    }
    return false;
  },
  clickButton: function (event) {
    if (this.data.result == 0) {
      if (event.target.id == 'back' || event.target.id == 'C' || event.target.id == 'addSub' || event.target.id == '%' || event.target.id == '+' || event.target.id == '-' || event.target.id == '×' || event.target.id == '÷' || event.target.id == '=') return;
      this.setData({
        result: event.target.id
      });
    } else if (event.target.id == 'back') {
      this.setData({
        result: this.data.result.length == 1 ? '0' : this.data.result.substring(0, this.data.result.length - 1)
      });
    } else if (event.target.id == 'C') {
      this.setData({
        result: '0'
      });
    } else if (event.target.id == 'addSub') {
      var r = this.data.result;
      if (this.isOperatorEnd(r)) return;
      if (r.charAt(0) == '-') this.setData({
        result: r.replace('-', '').replace('(', '').replace(')', '')
      });
      else this.setData({
        result: '-(' + r + ')'
      });
    } else if (event.target.id == '%') {
      // if (this.isOperatorEnd(this.data.result)) return;
      this.setData({
        result: this.data.result + event.target.id
      });
    } else if (event.target.id == '=') {
      if (this.isOperatorEnd(this.data.result)) return;
      this.setData({
        result: this.calculate(this.data.result)
      });
      this.setData({
        completeCalculate: true
      });
    } else {
      if (this.isOperatorEnd(this.data.result) && this.isOperatorEnd(event.target.id)) return;
      // 如果计算结果有小数点,直到输入运算符前不能再输入小数点
      if (this.data.completeCalculate && this.data.result.indexOf('.') != -1 && event.target.id == '.') return;
      for (var i = 0; i < this.data.valiBackOfArray.length - 1; i++) {
        if (this.data.valiBackOfArray[i] == event.target.id) {
          this.setData({
            completeCalculate: false
          });
          break;
        }
      }
      this.setData({
        result: this.data.result + event.target.id
      });
    }
  }
})

你可能感兴趣的:(微信小程序,微信小程序,小程序)