【课程设计】基于栈以及后缀表达式的简易计算器 taro程序 微信小程序
项目说明
本系统使用Taro框架进行开发, Taro 是一个开放式跨端跨框架解决方案,支持使用 React/Vue/Nerv 等框架来开发 微信 / 京东 / 百度 / 支付宝 / 字节跳动 / QQ 小程序 / H5 / RN 等应用。现如今市面上端的形态多种多样,Web、React Native、微信小程序等各种端大行其道。当业务要求同时在不同的端都要求有所表现的时候,只编写一套代码就能够适配到多端的能力就显得极为需要。
Taro编译框架也是得遵循小程序的规则的,基本在运用api,路由以及组件上与小程序无异,只是在代码风格不太一样,小程序的wxml更类似原生的html,taro的就相当于在html中嵌套js代码,更趋向于是小程序的底层代码,比如wx:for所遍历的数据,就是依靠 数组.map出来的
由于微信小程序中不可使用eval函数,所以考虑使用栈以及后缀表达式的形式来实现简易的计算器小程序
关键技术
1、字符串式转中缀表达式
问题描述:首先,需要输入的字符串式压入栈中,因为考虑到有小数点计算,所以不能使用 数组[索引]的方式获取每个元素,所以第一点考虑的就是通过递归的方式,解析出每个数字以及运算符
2、中缀表达式转后缀表达式
问题描述:通过栈的方式,以及优先级的考虑,将中缀表达式转换成后缀表达式
3、解决浮点误差的问题
问题描述:因为计算机保存浮点数的精度有限,所以进行小数运算的时候,经常会出现运算结果的误差问题
解决方案:在进行乘除运算的时候,将小数扩大到整数倍,再将结果缩小到相应的倍数
4、计算器输入限制的问题
问题描述:输入时,必须考虑到.±*/%这几个符号的限制,否则将不能进行运算
解决方案:在输入时做一个限制,
- 最后一个字符是符号的时候,下一个字符不能输入符号了
- 一个数字中不能出现两个小数点
- 初始不能输入运算符或者小数点