小程序怎么实现计算器功能
发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,本篇内容介绍了"小程序怎么实现计算器功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现模拟手机上
千家信息网最后更新 2024年11月27日小程序怎么实现计算器功能
本篇内容介绍了"小程序怎么实现计算器功能"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
实现模拟手机上的计算器,输入即可运算
本页面是做一个计算收款的页面,如果不需要下面的内容可以删除掉
wxml
{{express}} ={{result}} AC % ÷ 7 8 9 × 4 5 6 - 1 2 3 + 0 . = 人工收款 收款码收款
js
data: { express: "", //第一行的表达式 result: "0", //第二行的结果 calc2: { str: "", //临时字符串 strList: [], //中缀表达式存储(队列先进先出) strListP: [], //后缀表达式(队列先进先出) list: [], //存放运算符的堆栈 (先进后出) count: [], //计算表达式堆栈(先进后出) flag: 0 //表示字符串最后一位是否是运算符号位 }, isqr: false, }, //给所有text或view绑定此事件,同时增加对应的自定义属性值 clickKeyBoard(e) { let that = this; let input = e.currentTarget.dataset.con //获取每次输入的内容 if (input == "c") { that.handleClear(); } else if (input == "←") { that.handleDelete(); } else { //调用处理字符串 that.handleInfo(input); } }, //处理本地用户的输入操作 handleInfo(input) { if (this.data.calc2.str.length == 0) { //第一次点击 if (input == "-" || this.checkShuZi(input)) { //为减号 this.addStr(input); } else { return; } } else { if (this.data.calc2.flag == 1) { //说明最后一位是符号 if (this.checkFuHao(input)) { this.data.calc2.str = this.data.calc2.str.substring(0, this.data.calc2.str.length - 1); //去掉最后一位符号,添加最新的符号进去 this.addStr(input); } else { this.addStr(input); } console.log(); } else { this.addStr(input); this.result(); } } this.result(); }, //客户点击等号了 result() { //每次点击等号重新把列表给空 this.data.calc2.strList.length = 0; this.data.calc2.strListP.length = 0; this.data.calc2.list.length = 0; this.data.calc2.count.length = 0; //将表达式变成中缀表达式队列 this.expressToStrList(this.data.express); console.log(this.data.calc2.strList); //将中缀表达式集合赋值给临时变量 let tempList = this.data.calc2.strList; this.expressToStrListP(tempList); console.log(this.data.calc2.strListP); //最终的计算 let tempP = this.data.calc2.strListP for (let m in tempP) { if (this.checkFuHao2(tempP[m])) { //不含点号的符号方法判断 let m1 = this.data.calc2.count[0]; //取出第一个数据 this.data.calc2.count.shift(); //取出后删除该数据 let m2 = this.data.calc2.count[0]; this.data.calc2.count.shift(); // console.log("m1是" +m1); // console.log("m2是" + m2); // console.log("运算符是" + tempP[m]); // console.log("计算结果是:" + this.countDetail(m2, tempP[m], m1)); this.data.calc2.count.unshift(this.countDetail(m2, tempP[m], m1)); //将计算结果放到count中 } else { this.data.calc2.count.unshift(tempP[m]) //将数字压进去 } } console.log("最终的计算结果是" + parseFloat(this.data.calc2.count[0]).toFixed(2)); this.setData({ result: this.data.calc2.count[0] }); }, //实际具体计算 countDetail(e1, e2, e3) { let result = 0.0; console.log(e1); console.log(e2); console.log(e3); try { if (e2 == "×") { if (typeof(e1) != "undefined") { result = parseFloat(e1) * parseFloat(e3); } else { result = parseFloat(e3); } } else if (e2 == "÷") { if (typeof(e1) != "undefined") { result = parseFloat(e1) / parseFloat(e3); } else { result = parseFloat(e3); } } else if (e2 == "%") { if (typeof(e1) != "undefined") { result = parseFloat(e1) / parseFloat(e3); } else { result = parseFloat(e3); } } else if (e2 == "+") { if (typeof(e1) != "undefined") { result = parseFloat(e1) + parseFloat(e3); } else { result = parseFloat(e3); } } else { if (typeof (e1) != "undefined") { result = parseFloat(e1) - parseFloat(e3); } else { result = parseFloat(e3); } } } catch (error) { } return result; }, //将中缀表达式集合转变为后缀表达式集合 expressToStrListP(tempList) { for (let item in tempList) { if (this.checkFuHao2(tempList[item])) { //不含点号的符号方法判断 if (this.data.calc2.list.length == 0) { this.data.calc2.list.unshift(tempList[item]); //直接添加添加运算符 } else { if (this.checkFuHaoDX(this.data.calc2.list[0], tempList[item])) { for (let x in this.data.calc2.list) { this.data.calc2.strListP.push(this.data.calc2.list[x]); //将运算符都放到listP中 } this.data.calc2.list.length = 0; //循环完把list置空 this.data.calc2.list.unshift(tempList[item]); //加新元素进去 } else { this.data.calc2.list.unshift(tempList[item]); //直接添加添加运算符 } } } else { this.data.calc2.strListP.push(tempList[item]); //数字直接加到后缀集合中 } } //循环完有可能最后一个是数字了,取到的不是字符,那么运算符里剩余的还的加到listP中 if (this.data.calc2.list.length > 0) { for (let x in this.data.calc2.list) { this.data.calc2.strListP.push(this.data.calc2.list[x]); //将运算符都放到listP中 } this.data.calc2.list.length = 0; //循环完把list置空 } }, //判断两个运算符的优先级(m1是list集合中最后加进去的那个元素比较将要进来的元素,如果m1比m2大,弹出list集合到listp中,再把m2加到list中,否则直接将m2加入list) checkFuHaoDX(m1, m2) { if ((m1 == "%" || m1 == "×" || m1 == "÷") && (m2 == "-" || m2 == "+")) { return true; } else { return false; } }, //将字符串表达式变成中缀队列 expressToStrList(express) { let temp = ""; //定义临时变量 //将表达式改为中缀队列 for (let i = 0; i < express.length; i++) { if (i == 0 && express[i] == "-") { temp = temp + express[i]; } else { if (this.checkShuZi2(express[i])) { //如果i是数字 temp = temp + express[i]; } else { if (temp.length > 0) { if (express[i] == ".") { temp = temp + express[i]; } else { this.data.calc2.strList.push(parseFloat(temp)); temp = ""; this.data.calc2.strList.push(express[i]); } } else { temp = temp + express[i]; } } } } //循环到最后再看temp中有没有数字了,如果有加进来 if (temp.length > 0 && this.checkShuZi(temp.substring(temp.length - 1))) { this.data.calc2.strList.push(parseFloat(temp)); temp = ""; } }, //处理客户输入清除键 handleClear() { this.data.calc2.str = ""; this.data.calc2.strList.length = 0; this.data.calc2.strListP.length = 0; this.data.calc2.list.length = 0; this.data.calc2.count.length = 0; this.data.calc2.minusFlag = 0; this.setData({ express: "", result: "" }); }, //处理客户输入回退键 handleDelete() { let that = this; let str = that.data.calc2.str; if (str.length > 0) { str = str.substring(0, str.length - 1); that.data.calc2.str = str; that.setData({ express: str, }); } else { return; } }, //判断是否是运算符(含点号,用在组织表达式时 .不能重复输入) checkFuHao(input) { if (input == "-" || input == "+" || input == "÷" || input == "%" || input == "×" || input == ".") { return true; } else { return false; } }, //判断是否是运算符(不含点号) checkFuHao2(input) { if (input == "-" || input == "+" || input == "÷" || input == "%" || input == "×") { return true; } else { return false; } }, //判断是否是数字 checkShuZi(input) { if (input == "0" || input == "1" || input == "2" || input == "3" || input == "4" || input == "5" || input == "6" || input == "7" || input == "8" || input == "9") { return true; } else { return false; } }, //判断是否是数字(包含.号,用在表达式转中缀方法中) checkShuZi2(input) { if (input == "0" || input == "1" || input == "2" || input == "3" || input == "4" || input == "5" || input == "6" || input == "7" || input == "8" || input == "9" || input == ".") { return true; } else { return false; } }, //给字符串添加新字符(直接追加 在判断是否要改变变量flag) addStr(input) { this.data.calc2.str = this.data.calc2.str + input; if (this.checkFuHao(input)) { this.data.calc2.flag = 1; //设置标记位位1 } else { this.data.calc2.flag = 0; } this.setData({ express: this.data.calc2.str }); },
wxss
/* pages/index/collect-money/collect-money.wxss */page { background-color: #f8f8f8;}.bottom-handle { height: 100rpx; width: 100%; display: flex; align-items: center;}.fixation-box { position: fixed; bottom: 0; width: 750rpx;}.sweep-code-verification { background: #fff; border-top: 1rpx solid #e3e3e3; width: 220rpx; color: #333;}.artificial-collection, .sweep-code-verification { height: 100%; display: flex; flex-direction: column; align-items: center; font-size: 24rpx; justify-content: center;}.artificial-collection { background: #f3b055; width: 248rpx; color: #fff;}.payment-code { background-image: linear-gradient(203deg, #6f6f6f 0%, #3c3c3c 96%); flex: 1; font-size: 34rpx; color: #fff; text-align: center; line-height: 100rpx;}.sweep-code-verification image { width: 40rpx; height: 40rpx;}.artificial-collection image { width: 40rpx; height: 40rpx;}.calculator-box { background-color: #fff;}.calculator-line { display: flex; align-items: center;}.boxtn { width: 25%; height: 154rpx; border-left: none; display: flex; align-items: center; justify-content: center;}.calculator-box .calculator-line:last-child { border-bottom: none;}.calculator-line { border-bottom: 1rpx solid #dedede;}.btn1, .btn2 { border-right: 1rpx solid #dedede;}.btn2 { width: 50%;}.equal { background: #f3b055; font-size: 61rpx; color: #fff;}.num { font-size: 60rpx; color: #000;}.clear { font-size: 48rpx; color: #f3b055;}.percent { font-size: 60rpx; color: #000;}.charge-content { background: #fff; border-radius: 24rpx; width: 540rpx; display: flex; flex-direction: column; align-items: center;}.charge-title { background: #f3b055; border-radius: 12px 12px 0 0; width: 100%; height: 92rpx; font-size: 34rpx; line-height: 92rpx; text-align: center; color: #fff;}.charge-money { font-size: 60rpx; color: #333; line-height: 84rpx; margin-top: 35rpx;}.charge-propmt { font-size: 28rpx; color: #999; line-height: 42rpx; padding-bottom: 40rpx;}.charge-btn { display: flex; align-items: center; height: 100rpx; border-top: 1rpx solid #ddd; width: 100%;}.charge-cancel, .charge-confirm { flex: 1; text-align: center; line-height: 100rpx; font-size: 34rpx;}.charge-cancel { color: #999; border-right: 1rpx solid #ddd;}.charge-confirm { color: #f3b055;}.successful-content { background: #fff; border-radius: 24rpx; width: 540rpx; display: flex; flex-direction: column; align-items: center;}.success-icon { width: 120rpx; margin-top: 45rpx; height: 120rpx;}.successful-title { font-size: 34rpx; color: #333; line-height: 42rpx; padding: 30rpx 0; font-weight: 600;}.clear-icon { width: 80rpx; height: 80rpx;}.calculate-box { position: fixed; top: 0; bottom: 875rpx; width: 100%; display: flex; flex-direction: column; align-items: flex-end; padding: 0 50rpx;}.result-num { font-size: 88rpx; color: #333; line-height: 124rpx;}.calculate-txt { font-size: 60rpx; color: #333; line-height: 84rpx; margin-top: auto; word-wrap: break-word; text-align: right; word-break: break-all; text-overflow: -o-ellipsis-lastline; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;}.suspend-box{ height: 64rpx; background-color: rgba(0, 0, 0, .5); position: fixed; top: 70rpx; left: 0; color: #fff; display: flex; align-items: center; font-size: 24rpx; padding: 0 20rpx; border-radius: 0 100rpx 100rpx 0; z-index: 9;}.close-suspend{ width: 30rpx; height: 30rpx;}
"小程序怎么实现计算器功能"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
表达式
运算
运算符
中缀
字符
数字
符号
输入
字符串
队列
先进
内容
结果
处理
循环
计算器
元素
变量
后缀
客户
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北校园网络安全系统
根据供货管理数据库
石家庄工业控制上位机软件开发
linux服务器性能优化
软件开发语言机构
数据库条件约束条件
瑞士理工网络安全
唱响网络安全曲
涉密网网络安全设计要求
管理软件数据库连接失败
安卓软件开发程序员
cmd命令同步服务器
服务器电源 启动
注册亚马逊需要用云服务器吗
数据库制作个人信息表单
远程管理服务器更新
ps5原神什么服务器
曙光服务器前面板指示灯图示
康佳网络电视服务器异常
互联网医院网络科技有限公司
茶陵县网络安全有关文件精神
杨浦区参考网络技术创新服务
供应网络服务器机柜
科技手抄报一张网络安全手抄报
阜阳轩双互联网科技有限公司
excel独立窗体软件开发
智能电表数据传给服务器吗
增加服务器远程连接数
武汉国家网络安全人才社区
饥荒服务器怎么安全关闭