Page({
data: {
expression:"",
result:"",
class1:"view5",
class2:"view6",
},
bindViewTap(event) {
if(event.target.dataset.value==="C"){//按键C
this.setData({
expression: "",
result:"",
})
return;
}else if(event.target.dataset.value==="《X"){//按键《X
if(this.data.expression[this.data.expression.length-2]==="E"){
this.setData({
expression: this.data.expression.substring(0,this.data.expression.length-2),
})
}else{
this.setData({
expression: this.data.expression.substring(0,this.data.expression.length-1),
})
}
}else if(event.target.dataset.value==="="){//按键=
if(this.data.result==="")return;
this.setData({
class1: "view5 view7",
class2: "view6 view5",
})
setTimeout(()=>{
this.setData({
class1: "view5 view8",
class2: "view6 view8",
expression:this.data.result,
result:"",
});
},400);
return;
}else if(event.target.dataset.value==="."){//按键.
if(/\.$|\.\d+$/.test(this.data.expression));
else if(/[%÷×\-\+]$|^$/.test(this.data.expression)){
this.setData({
expression: this.data.expression+"0."
})
}else if(/\d+$/.test(this.data.expression)){
this.setData({
expression: this.data.expression+"."
})
}
}else if(event.target.dataset.value==="%"){//按键%
if(/\d+$/.test(this.data.expression)){
this.setData({
expression: this.data.expression+event.target.dataset.value
})
}else if(this.data.expression===""){
this.setData({
expression: "0%"
})
}else if(/\D+$/.test(this.data.expression)){
this.setData({
expression: this.data.expression.split(/\D+$/)[0]+"%",
})
}
}else if(/\-/.test(event.target.dataset.value)){//按键-
this.setData({
expression: /(^|[÷×\-\+])\-$/.test(this.data.expression)?this.data.expression:this.data.expression+event.target.dataset.value,
})
}else if(/[÷×\+]/.test(event.target.dataset.value)){//按键÷×+
let expression=this.data.expression;
if(!expression||expression==="-")return;
else{
this.setData({
expression: (/\d[÷×\+\-\.]{2}$/.test(expression)?expression.substring(0,expression.length-2):/\d[÷×\+\-\.]$/.test(expression)?expression.substring(0,expression.length-1):expression)+event.target.dataset.value,
})
}
}else if(+event.target.dataset.value===0){//按键00和0
if(/%$/.test(this.data.expression)){
this.setData({
expression:this.data.expression.substring(0,this.data.expression.length-1)
})
}
var num=this.data.expression.match(/[\d\.]+$/);
if(num===null){
this.setData({
expression: this.data.expression+"0"
})
}else if(/\.|^[1-9]$|\d{2,}/.test(num[0])){
this.setData({
expression: this.data.expression+event.target.dataset.value
})
}
}else{//其它数字按键
this.setData({
expression: (/(^|[\+\-×÷])0%$/.test(this.data.expression)?this.data.expression.substring(0,this.data.expression.length-2):/(^|[^\.\d])0$|%$/.test(this.data.expression)?this.data.expression.substring(0,this.data.expression.length-1):this.data.expression)+event.target.dataset.value
})
}
//运算
if(/^[\d%\.E]*[÷×\+\-]?$/.test(this.data.expression)){
this.setData({
result:''
})
return;
}
var expression=this.data.expression.replace(/[\d\.]+%/,num=>parseFloat(num)+"÷100");//百分数转小数
console.log(expression,"------11111");
expression=expression.replace(/[^\+\-]+/g,equ=>{
console.log(equ,"------33333");
var str1="";
equ=equ.replace(/÷[\d\.E]+/g,item=>{
console.log(item,"------444444");
str1+=item;
return "";
})+str1;
console.log(equ,"------22222");
var str="";
equ=equ.replace(/[\d\.E]+/g,num=>{
if(/E|^\d*$/.test(num))return num;
else if(/\./.test(num)){
var a=10**(num.length-num.indexOf(".")-1);
str+="÷"+a;
return num*a;
}
})+str;
equ=equ.replace(/[×÷]{2}/g,"÷");
return equ;
});//解决0.3*3=0.899999999999问题
console.log(expression,"0000000");
var formulas=expression.split(/(?<=[\d\.E]+)(?=[÷×\+\-])|(?<=\d[÷×\+\-])(?=[\d\-])/);//expression分割出来的 数字或运算符
if(/\D$/.test(formulas[formulas.length-1])){
formulas.pop();
if(/\D$/.test(formulas[formulas.length-1]))formulas.pop();
}
console.log(formulas,1111111)
if(formulas.length>1){//可以正常运算
console.log(formulas,22222222)
let find=true;
while(find){
find=formulas.find((item,index)=>{
let find=/[÷×]/.test(item);
if(find){
switch(item){
case "÷": formulas[index-1]=formulas[index-1]/formulas[index+1];break;
case "×": formulas[index-1]=formulas[index-1]*formulas[index+1];break;
}
formulas.splice(index,2);
}
return find;
})
};
formulas.forEach((item,index)=>{
switch(item){
case "-": formulas[0]=formulas[index-1]-formulas[index+1];break;
case "+": formulas[0]=+formulas[index-1]+(+formulas[index+1]);break;
}
});
formulas.length=1;
formulas+="";
formulas=formulas.replace(/\.\d{13,}/,str=>str.substring(0,14));//小数过长只取13位
this.setData({
result:formulas.replace(/e\+/,"E")
})
}else{
this.setData({
result:''
})
}
},
})
没有合适的资源?快使用搜索试试~ 我知道了~
微信小程序-马马虎虎的计算器
共13个文件
json:5个
js:4个
wxss:3个
需积分: 28 2 下载量 42 浏览量
2022-10-20
17:52:47
上传
评论
收藏 8KB ZIP 举报
温馨提示
微信小程序入门项目-做一个马马虎虎的计算器
资源详情
资源评论
资源推荐
收起资源包目录
微信小程序-计算器.zip (13个子文件)
miniprogram-3
app.json 278B
.eslintrc.js 587B
pages
index
index.js 7KB
index.json 3B
index.wxss 1KB
index.wxml 1KB
project.private.config.json 353B
sitemap.json 191B
app.wxss 65B
styles
iconfont.wxss 2KB
app.js 364B
project.config.json 1KB
utils
util.js 460B
共 13 条
- 1
好好打代码
- 粉丝: 4
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0