微信小程序實現簡易計算器_第1頁
微信小程序實現簡易計算器_第2頁
微信小程序實現簡易計算器_第3頁
微信小程序實現簡易計算器_第4頁
微信小程序實現簡易計算器_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第微信小程序實現簡易計算器1.中綴表達式

中綴表達式是一種通用的算術或邏輯公式表示方法,操作符以中綴形式處于操作數的中間。中綴表達式是人們常用的算術表示方法。

雖然人的大腦很容易理解與分析中綴表達式,但對計算機來說中綴表達式卻是很復雜的,因此計算表達式的值時,通常需要先將中綴表達式轉換為前綴或后綴表達式,然后再進行求值。對計算機來說,計算前綴或后綴表達式的值非常簡單。

2.后綴表達式

從左至右掃描表達式,遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素op棧頂元素),并將結果入棧;重復上述過程直到表達式最右端,最后運算得出的值即為表達式的結果。

例:

(1)8+4-62用后綴表達式表示為:

84+62-

(2)2*(3+5)-4+7/1用后綴表達式表示為:

35+2*71/4-+

例如后綴表達式“34+5×6-”:

(1)從左至右掃描,將3和4壓入堆棧;

(2)遇到+運算符,因此彈出4和3(4為棧頂元素,3為次頂元素,注意與前綴表達式做比較),計算出3+4的值,得7,再將7入棧;

(3)將5入棧;

(4)接下來是×運算符,因此彈出5和7,計算出7×5=35,將35入棧;

(5)將6入棧;

(6)最后是-運算符,計算出35-6的值,即29,由此得出最終結果。

二、程序代碼

1.代碼

app.js配置代碼如下:

//app.js

App({

onLaunch(){

//展示本地存儲能力

constlogs=wx.getStorageSync('logs')||[]

logs.unshift(Date.now())

wx.setStorageSync('logs',logs)

//登錄

wx.login({

success:res={

//發(fā)送res.code到后臺換取openId,sessionKey,unionId

globalData:{

userInfo:null

calculator:{

express:'',//臨時字符串

strList:[],//中綴表達式存儲(隊列先進先出)

strListP:[],//后綴表達式(隊列先進先出)

list:[],//存放運算符的堆棧(先進后出)

calculate:[]//計算表達式堆棧(先進后出)

})

2.邏輯代碼

calculator.js代碼如下:

//pages/calculator/calculator.js

constapp=getApp()

Page({

*頁面的初始數據

data:{

operators:['AC','DEL','%','/','7','8','9','×','4','5','6','+','1','2','3','-','0','.'],

res:'=',

expression:'0',

clearAll(){

this.setData({

expression:'0',

result:''

click:function(event){

constval=event.target.dataset.value;

if(val=='AC'){

this.clearAll();

}elseif(val=='DEL'){

if(this.data.expression!='0'){

constres=this.data.expression.substr(0,this.data.expression.length-1);

this.setData({

expression:res

}else{

varlen=this.data.expression.length;

vars=this.data.expression.substring(len-1,len);

if((this.checkOperator(s))this.checkOperator(val)){

constres=this.data.expression.substr(0,this.data.expression.length);

this.setData({

expression:res

}else{

if((this.data.expression=='0')(val=='.')){

this.setData({

expression:this.data.expression+String(val)

}else{

this.setData({

expression:this.data.expression==='0'val:this.data.expression+String(val)

result(){

app.calculator.strList.length=0;

app.calculator.strListP.length=0;

app.calculator.list.length=0;

app.calculator.calculate.length=0;

this.expressToStrList(this.data.expression);

lettempList=app.calculator.strList;

this.expressToStrListP(tempList);

lettempP=app.calculator.strListP

for(letmintempP){

if(this.checkOperator(tempP[m])){

letop1=app.calculator.calculate[0];

app.calculator.calculate.shift();

letop2=app.calculator.calculate[0];

app.calculator.calculate.shift();

app.calculator.calculate.unshift(this.countDetail(op2,tempP[m],op1));

}else{

app.calculator.calculate.unshift(tempP[m])

this.setData({

result:app.calculator.calculate[0]

countDetail(num1,operator,num2){

letresult=0.0;

try{

if(operator=="×"){

result=parseFloat(num1)*parseFloat(num2);

}elseif(operator=="/"){

result=parseFloat(num1)/parseFloat(num2);

}elseif(operator=="%"){

result=parseFloat(num1)%parseFloat(num2);

}elseif(operator=="+"){

result=parseFloat(num1)+parseFloat(num2);

}else{

result=parseFloat(num1)-parseFloat(num2);

}catch(error){

returnresult;

expressToStrListP(tempList){//將中綴表達式集合轉變?yōu)楹缶Y表達式集合

for(letitemintempList){

if(this.checkOperator(tempList[item])){

if(app.calculator.list.length==0){

app.calculator.list.unshift(tempList[item]);

}else{

if(paerOperator(app.calculator.list[0],tempList[item])){

for(letxinapp.calculator.list){

app.calculator.strListP.push(app.calculator.list[x]);

app.calculator.list.length=0;

app.calculator.list.unshift(tempList[item]);

}else{

app.calculator.list.unshift(tempList[item]);

}else{

app.calculator.strListP.push(tempList[item]);

if(app.calculator.list.length0){

for(letxinapp.calculator.list){

app.calculator.strListP.push(app.calculator.list[x]);

app.calculator.list.length=0;

compaerOperator(op1,op2){

if((op1=="%"||op1=="×"||op1=="/")(op2=="-"||op2=="+")){

returntrue;

}else{

returnfalse;

expressToStrList(expression){//將字符串表達式變成中綴隊列

lettemp='';

for(leti=0;iexpression.length;i++){

if(i==0expression[i]=="-"){

temp=temp+expression[i];

}else{

if(this.checkDigit(expression[i])){

temp=temp+expression[i];

}else{

if(temp.length0){

if(expression[i]=="."){

temp=temp+expression[i];

}else{

app.calculator.strList.push(parseFloat(temp));

temp='';

app.calculator.strList.push(expression[i]);

}else{

temp=temp+expression[i];

if(temp.length0this.checkDigit(temp.substring(temp.length-1))){

app.calculator.strList.push(parseFloat(temp));

temp='';

//判斷是否是運算符

checkOperator(input){

if(input=="-"||input=="+"||input=="/"||input=="%"||input=="×"){

returntrue;

}else{

returnfalse;

//判斷是否是數字

checkDigit(input){

if((/^[0-9]*$/.test(input))){

returntrue;

}else{

returnfalse;

})

3.界面代碼

calculator.js代碼如下:

!s/calculator/calculator.wxml--

view

view

view{{expression}}/view

view={{result}}/view

/view

view

blockwx:for="{{operators}}"

viewdata-value="{{item}}"capture-bind:tap="click"{{item}}/view

/block

viewdata-value="{{res}}"bindtap="result"{{res}}/view

/view

/view

4.樣式代碼

calculator.js代碼如下:

/*pages/calculator/calculator.wxss*/

.container1{

width:100%;

height:100%;

.displayer{

border:1pxsolid#f1f3f3;

width:100%;

height:602![在這里插入圖片描述](/20250328162054440.pngx-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNDI4MjE5,size_16,color_FFFFFF,t_70#pic_center)

font-size:45rpx;

background-color:rgba(241,243,243,1.0);

.btnArea{

display:flex;

flex-flow:rowwrap;

justify-content:flex-start;

padding:3rpx;

margin:0;

background-color:rgb(241,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論