微信小程序之计算器

2023-11-18

参考博客: 

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

效果图:

代码:

calculator.wxml

<view class='screen'>{{result}}</view>

<view class='test-bg'>
  <view class='btnGroup'>
    <view class='item grey' bindtap='clickButton' id="{{C}}">AC</view>
    <view class='item grey' bindtap='clickButton' id="{{addSub}}">+/-</view>
    <view class='item grey' bindtap='clickButton' id="{{percent}}">%</view>
    <view class='item brown' bindtap='clickButton' id="{{div}}">÷</view>
  </view>

  <view class='btnGroup'>
    <view class='item black' bindtap='clickButton' id="{{id7}}">7</view>
    <view class='item black' bindtap='clickButton' id="{{id8}}">8</view>
    <view class='item black' bindtap='clickButton' id="{{id9}}">9</view>
    <view class='item brown' bindtap='clickButton' id="{{mut}}">×</view>
  </view>

  <view class='btnGroup'>
    <view class='item black' bindtap='clickButton' id="{{id4}}">4</view>
    <view class='item black' bindtap='clickButton' id="{{id5}}">5</view>
    <view class='item black' bindtap='clickButton' id="{{id6}}">6</view>
    <view class='item brown' bindtap='clickButton' id="{{sub}}">-</view>
  </view>

  <view class='btnGroup'>
    <view class='item black' bindtap='clickButton' id="{{id1}}">1</view>
    <view class='item black' bindtap='clickButton' id="{{id2}}">2</view>
    <view class='item black' bindtap='clickButton' id="{{id3}}">3</view>
    <view class='item brown' bindtap='clickButton' id="{{add}}">+</view>
  </view>

  <view class='btnGroup'>
    <!-- <view class='item black' bindtap='clickButton' id="{{percent}}">%</view> -->
    <view class='item0 black' bindtap='clickButton' id="{{id0}}">0</view>
    <view class='item black' bindtap='clickButton' id="{{dot}}">.</view>
    <view class='item brown' bindtap='clickButton' id="{{equ}}">=</view>
  </view>

</view>

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
      });
    }
  }
})

分享自己做的学习网站:

George's Notes (bifinity.wang)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信小程序之计算器 的相关文章

  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Java将数字金额转换为中文大写

    import java math BigDecimal import java util regex Matcher import java util regex Pattern 2022 5 5 author lf public clas
  • vue对于时间的处理

    2023 08 05 11 25 45 假如这个就是我们要传的时间字符串 比如今天是2023 08 05 同一天 现在把这个时间字符串传入到 formatDate 这个方法 就会给你返回 11 25 比如今天是2023 08 06 前一天
  • 一文综述人脸检测算法(附资源)

    文章来源 SIGAI 本文共9400字 建议阅读10 分钟 本文将和大家一起回顾人脸检测算法的整个发展历史 导读 人脸检测是目前所有目标检测子方向中被研究的最充分的问题之一 它在安防监控 人证比对 人机交互 社交和娱乐等方面有很强的应用价值
  • mysql准确查询出以固定字符开头的数据

    在做开发过程中 我们经常会遇到多种支付方式 为了区分 我们可能会根据订单的前两位或者前几位固定值来区分 在这里我向大家推荐三种方法 使用LEFT函数 函数使用方法如下 str是原串字段 length是要提取的长度 这里只能是正整数 该字段是
  • 检测zookeeper和kafka是否正常

    cd dirname 0 source bash profile count zoo ps ef grep config zookeeper properties grep v grep wc l count kafka ps ef gre
  • 常见的八种导致 APP 内存泄漏的问题

    像 Java 这样具有垃圾回收功能的语言的好处之一 就是程序员无需手动管理内存分配 这减少了段错误 segmentation fault 导致的闪退 也减少了内存泄漏导致的堆空间膨胀 让编写的代码更加安全 然而 Java 中依然有可能发生内
  • VUE3快速上手

    目录 1 Vue3简介 2 Vue3带来了什么 1 性能的提升 2 源码的升级 3 拥抱TypeScript 4 新的特性 一 创建Vue3 0工程 1 使用 vue cli 创建 2 使用 vite 创建 项目结构介绍 二 常用 Comp

随机推荐

  • 软件测试行业所需要的技能

    近来 软件测试行业发展迅速 企业越来越重视测试了 越来越多的人加入了测试大军中 很多人也想通过自学来学习软件测试技术加入这个行业 让我们来看一下究竟如何才能学好软件测试吧 一 软件测试基础知识 要想进入测试这个行业 就必须要了解什么是软件测
  • IDEA常用配置之类Tab页多行显示

    文章目录 IDEA常用配置之类Tab页多行显示 IDEA常用配置之类Tab页多行显示 默认在Idea中打开类过多 后面会隐藏显示 这里修改配置 将类设置为多行显示 方便查找已经打开的类 修改后显示样式
  • Redis主从部署及sentinel配置详细教程

    Redis主从部署及sentinel配置详细教程 一 环境介绍 1 三个redis节点的IP规划 2 节点的系统版本 二 安装redis 1 下载Redis源码包 2 解压软件包 3 安装gcc相关模块 4 编译软件目录deps 下内容 5
  • 【亲测】Parallels Desktop 16 / 17在MacOs Big Sur / Monterey下网络初始化失败:您的虚拟机将继续正常运作 解决办法

    场景 Mac升级Big Sur Monterey后 然后再升级Parallels Desktop到16 17版本后 Parallels Desktop开启windows或者其他虚拟机就出现 网络初始化失败 您的虚拟机将继续正常运作 解决办法
  • 使用存储过程返回结果集

    因业务复杂 SQL较为庞大 后改造为存储过程方式 传参 获取结果集 此处只显示存储过程的结构部分 也是最重要部分 CREATE OR REPLACE PACKAGE PKG QUALITYCONTROL IS TYPE retcursor
  • vite + vue3 + setup + pinia + ts 项目实战

    介绍 一个使用 vite vue3 pinia ant design vue typescript 完整技术路线开发的项目 秒级开发更新启动 新的vue3 composition api 结合 setup纵享丝滑般的开发体验 全新的 pin
  • Ubuntu下安装和注册beyond compare 4

    下载 安装 下载安装包网址 Ubuntu上选择Debian安装包 https www scootersoftware com download php sudo dpkg i bcompare 4 4 6 27483 amd64 deb 注
  • 【汽车电子】浅谈车载系统QNX

    目录 1 概述 2 QNX系统介绍 2 1 系统特点 2 2 系统结构 2 3 调度策略 3 QNX内核 4 QNX网络结构 5 QNX网络设备驱动 6 网络设备信息的统计 2 发展历程 3 应用场景 4 相关链接 1 概述 QNX是一种商
  • Stereo-Detection:YOLO v5与双目测距结合,实现目标的识别和定位测距

    简介 Stereo Detection 是一个传统的SGBM深度测距 yolov5目标检测 并部署在Jeston nano的开源教程 它致力于让更多的大四学生毕业 以及让研一学生入门 开源链接 yzfzzz Stereo Detection
  • Visual Studio运行C语言程序(第一个程序)

    以VS2017为例 首先打开VS 新建Visual C 空项目 建议将编写的程序放在一个文件夹里 并以编写程序当天的日期来命名 在Visual C 里选择C 文件 命名为自己容易认出的名称 后缀为 c就行 右击资源管理器的源文件 选择添加
  • 用Python爬取电影数据并可视化分析_python电影数据分析

    文章目录 一 获取数据 1 技术工具 2 爬取目标 3 字段信息 二 数据预处理 1 加载数据 2 异常值处理 3 字段处理 三 数据可视化 四 总结 一 获取数据 1 技术工具 IDE编辑器 vscode 发送请求 requests 解析
  • Spring refresh() 方法详解(启动Spring,bean的创建过程)

    Spring refresh方法详解 一 refresh 方法预览 二 refresh 方法中调用的每个方法 1 this prepareRefresh 激活开启容器 2 this obtainFreshBeanFactory 获取 bea
  • SQL Server 批量插入数据的两种方法

    在SQL Server 中插入一条数据使用Insert语句 但是如果想要批量插入一堆数据的话 循环使用Insert不仅效率低 而且会导致SQL一系统性能问题 下面介绍SQL Server支持的两种批量数据插入方法 Bulk和表值参数 Tab
  • CSAPP学习记录-Course Overview

    这是我开始学习CSAPP的笔记的第一遍 在接下来的内容 我会分享自己在学习CSAPP时的笔记 感受等等 学习资料来自b站 声明 所有内容基于自己的理解 如有错误感谢大家指出 链接 https www bilibili com video B
  • QT中按钮格式QSS代码

    鼠标正常时按钮效果 QPushButton myButton normal 鼠标正常时的效果 color 000000 background color rgb 40 85 20 改变背景色 border style inset 改变边框风
  • Hadoop3.x 之 MapReduce 开发总结(月薪过万)

    Hadoop之 MapReduce开发总结 MapReduce 开发总结 月薪过万 1 输入数据接口 InputFormat 月薪过万 2 逻辑处理接口 Mapper 月薪过万 3 Partitioner 分区 月薪过万 4 Compara
  • 图像分割2021

    cvpr2022总结 CVPR 2022 图像分割论文大盘点 大林兄的博客 CSDN博客 图像分割最新论文 尽管近年来实例分割取得了长足的进步 但如何设计具有实时性的高精度算法仍然是一个挑战 本文提出了一种实时实例分割框架OrienMask
  • [论文精读]BERT

    BERT Pre training of Deep Bidirectional Transformers for Language Understanding Abstract 作者介绍了一种新的语言模型 叫做BERT 是来自transfo
  • 服务器硬盘故障运维,运维人员处理云服务器故障方法总结

    我们团队为Ucloud云计算服务提供专家技术支持 每天都要碰到无数的用户故障 毕竟IAAS涉及比较底层的东西 不管设计的是大客户也好还是小客户 有了问题就必须要解决 也要要是再赶上修复时间紧 奇葩的技术平台 缺少信息和文档 基本上这过程都会
  • 微信小程序之计算器

    参考博客 微信小程序 简易计算器 Huang xianlong的博客 CSDN博客 微信小程序计算器 效果图 代码 calculator wxml