基于栈以及后缀表达式的简易计算器 taro程序 微信小程序

193 阅读3分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

基于栈以及后缀表达式的简易计算器 taro程序 微信小程序

文章目录

项目说明

本系统使用Taro框架进行开发, Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发 微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5 / RN 等应用。现如今市面上端的形态多种多样,Web、React Native、微信小程序等各种端大行其道。当业务要求同时在不同的端都要求有所表现的时候,只编写一套代码就能够适配到多端的能力就显得极为需要。

Taro编译框架也是得遵循小程序的规则的,基本在运用api,路由以及组件上与小程序无异,只是在代码风格不太一样,小程序的wxml更类似原生的html,taro的就相当于在html中嵌套js代码,更趋向于是小程序的底层代码,比如wx:for所遍历的数据,就是依靠 数组.map出来的

由于微信小程序中不可使用eval函数,所以考虑使用栈以及后缀表达式的形式来实现简易的计算器小程序

关键技术

1、字符串式转中缀表达式

问题描述:首先,需要输入的字符串式压入栈中,因为考虑到有小数点计算,所以不能使用 数组[索引]的方式获取每个元素,所以第一点考虑的就是通过递归的方式,解析出每个数字以及运算符

image.png

2、中缀表达式转后缀表达式

问题描述:通过栈的方式,以及优先级的考虑,将中缀表达式转换成后缀表达式\

image.png

image.png

3、解决浮点误差的问题

问题描述:因为计算机保存浮点数的精度有限,所以进行小数运算的时候,经常会出现运算结果的误差问题
解决方案:在进行乘除运算的时候,将小数扩大到整数倍,再将结果缩小到相应的倍数\

image.png

4、计算器输入限制的问题

问题描述:输入时,必须考虑到.±*/%这几个符号的限制,否则将不能进行运算
解决方案:在输入时做一个限制,

  1. 最后一个字符是符号的时候,下一个字符不能输入符号了
  2. 一个数字中不能出现两个小数点
  3. 初始不能输入运算符或者小数点\

image.png

5、关于“开发者工具以及预览都没问题,但是真机调试点击事件响应特别慢”的问题

解决过程:

1、一开始认为是没有绑定key导致的频繁渲染,但是都加上key值也不行

2、然后以为是使用ref,频繁操作真实dom元素,但是修改成以数据为驱动,减少操作真实dom后也不行

3、最后,捣鼓了很久,发现了可能是真机调试的版本问题,修改成真机调试的2.0版本问题即解决

image.png

6、整体效果

image.png